[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Access テキストボックスの行数のカウント
はい電算室です。今日はなにがおきるのでしょうか。
今、「お姉ちゃん」が困っていること。それは、Aceessのテキストボックスに入力してある一定の行数を超えると警告メッセージを出すというもの。
そんなの改行コード(CrLf)をカウントすればいいことじゃん。
と思ったのですが、実はそう簡単ではありませんでした。
改行コードを数えるのでもいいのでしょうが、最大5000文字入力できるテキストボックス。一字ごと検索して改行コードと一致したらカウントアップというのはあまり実用的ではありません。
あるサイトで見つけたのは、Enter キーを何回押下したか数えるというもの。しかし、それは新規入力では有効でしょうが、修正の場合はあらかじめ登録されている文字があるので正確とはいえません。
さらには、改行だけではなく、折り返しでも一行増えるわけで・・・。
どっかのサイトでは、座標軸を取得していたなぁー・・・・。Apiはあまり使いたくないし・・・
結局遅くまであーでもない、こーでもないと試行錯誤したのですが、有効な手はありませんでした。
が、家に帰ってからひらめきました。
なんだこんな手があるではないか。
では、紹介します。Aceessで、テキストボックス内の行数をカウントする方法。
考え方はこうです。
テキストボックス内のテキストを、一度テキストファイルとして出力します。そして、出力したテキストファイルを今度は一行ずつ読んでいくというもの。
一行あたり半角80文字入力できるテキストボックス(txt_記録)の行数をカウントします。改行コードなしの折り返しも考慮。
Dim i As Integer
Dim x As Double
Dim y As Double
Dim work_txtu As String 'Unicode用
Dim work_txta As String 'Ascii用
'テキストファイルのoutput open
Open "記録.txt" For Output As #1
Print #1, Me![txt_記録]
Close #1
'テキストファイルのinput open
Open "記録.txt" For Input As #1
i = 0
Do Until EOF(1) = True
Line Input #1, work_txtu 'テキストファイル一行ずつ読む
work_txta = StrConv(work_txtu, vbFromUnicode)
x = LenB(work_txta) '一行の文字数(バイト数)カウント
x = x / 80 '一行あたりの文字数(バイト数)で割る。
y = Fix(x) '小数点以下切捨
If y >= 1 Then
i = i + y
End If
If x = 0 Or x <> y Then 'ちょうど割り切れる場合も考える
i = i + 1
End If
Loop
Close #1
MsgBox ("行数は" & i)
ここでのポイントは、まず、テキストボックス内のデータを「記録.txt」に出力。それを、一行ずつ読みます。
(Line inputがミソ)
Access2000から文字コードはUnicode対応になっているので、すべてが2バイト1文字。全角半角の
判断がつかないので、これをAsciiコードに変換します。それが、
work_txta = StrConv(work_txtu, vbFromUnicode)
ですね。それを、一行あたりの文字数で割ってやって折り返しの場合の行数を算出。
あとは、ちょうど割り切れる場合のことなどを考慮してやればOKというわけです。
一度テキストファイルに落とすなんて
邪道ですか?
この記事へのトラックバック
- この記事にトラックバックする
Amazon
PR
ソフト関連
メーカー直販PC
周辺機器
ランキング
プロフィール
しかしながらあまりの激務に退職。もうシステム系はいやだと思っていたが、ひょんなことから企業の電算室に勤務することとなる。