![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
メモ帳(.txt)に
AAAA
BBBB
CCCC
と書いて、これら3行をラベルに表示させたいのです。
Private Sub Form_Load()
Dim myText As String
Open "C:\myFile.txt" For Input As #1
Do While Not EOF(1)
Input #1, myText
Loop
Close #1
Label1.Caption = myText
End Sub
上記のコードだと1行目のAAAAしか表示されません(泣)
どなたかご指導宜しくお願いします。
No.4ベストアンサー
- 回答日時:
>Me.Controls("label" & I).Caption = myTextの
>("label" & I)とはどういう意味なのでしょうか?
Me.Controls("label1")と書くと、フォーム上の「label1」というラベルコントロールを表します。
それをループ中なので
"label" & I
と表したのです。
でもVB6.0なので、コントロール配列にすればいいと思いますよ。
Label1(I).Caption = myText
って感じでつかえます。
さて。補足要求なのですが、ラベル1つに対して、テキスト1行を表示なのですか?
それともラベルは1つしかなく、そこに全部表示?
1つのラベルに全部表示するなら、
>Label1.Caption = myText
ではなく
Label1.Caption = Label1.Caption & myText & vbCrLf
とし、Loopの中に書きます。
(最後に改行が1つ余分に入っちゃいますが・・。)
この回答への補足
#1さん、#2さん、#4さん回答ありがとうございました。
1つのラベルに3行すべて全表示させることができました。
また質問で恐縮なのですが、
フォームにボタンを追加して、それをクリックするたびに同じラベルに
別のテキストファイル(myFile2.txt、myFile3.txt、myFile4.txt)の内容を
順次表示させていきたいのです。
この場合、4つのテキストファイルのOpen→Input→Closeはどのようにしたらよいのでしょうか?
また、別の方法として、4つのテキストファイルを1つにまとめて、
任意の位置を読み込んでいく(ランダムアクセスファイル?)ことは可能でしょうか?
回答に対する補足訂正します。「#3さん」が抜けていました(汗)
#1さん、#2さん、#3さん、#4さん回答ありがとうございました。
No.6
- 回答日時:
こんな感じかなぁ。
Private Sub Form_Load()
Dim myText As String '読み込みバッファ
Dim N As Integer 'ファイルNo
Dim cntAll As Integer '全部を保存する配列数
Dim strOne() As String '1まとまり(「AAA,BBB,CCC」単位)保存用の配列
Dim cntOne As Integer '↑配列数
'初期化
myText = ""
cntAll = -1
cntOne = -1
N = FreeFile
Open "C:\tmp\myFile.txt" For Input As N
Do While Not EOF(N)
'1行読み込み
Input #N, myText
'空行でなければ1まとまり用の配列に保存
If Len(myText) > 0 Then
cntOne = cntOne + 1
ReDim Preserve strOne(cntOne)
strOne(cntOne) = myText
End If
'空行か、ファイルの終りになったら全体の配列用の配列に保存
If Len(myText) = 0 Or EOF(N) Then
cntAll = cntAll + 1
ReDim Preserve strTextFile(cntAll)
'配列strOneの内容を改行で区切って連結したものをセット
strTextFile(cnt) = Join(strOne, vbCrLf)
'次の為に1まとまり用の配列を初期化
cntOne = -1
Erase strOne
End If
Loop
Close #N
End Sub
No.5
- 回答日時:
フォームの変数で
Private strTextFile(3) As String
を宣言。
フォームのLoadイベントで
strTextFile(0)にmyFile1.txtの内容。
strTextFile(1)にmyFile2.txtの内容。
strTextFile(2)にmyFile3.txtの内容。
strTextFile(3)にmyFile4.txtの内容。
を読んでおく。
ボタンのClickイベントで
Private Sub Command1_Click()
Static strNo As Integer
Label1.Caption = strTextFile(strNo)
strNo = (strNo+1) Mod 4
End Sub
とすれば、クリックする度に切り替わります。
--------------
ここまでがファイルが4つの場合。
1にファイルをまとめるなら、Loadイベントを工夫します。
例えば空行があるまでが1まとまりとしてstrTextFile()に1つ1つセットしていけば、ランダムアクセスの必要は無いでしょう。
例)myFile.txt
AAAA ←ここから
BBBB
CCCC ←ここまでstrTextFile(0)に読み込む
DDDD ←ここから
EEEE
FFFF ←ここまでstrTextFile(1)に読み込む
GGGG ←ここから
HHHH
IIII ←ここまでstrTextFile(2)に読み込む
JJJJ ←ここから
KKKK
LLLL ←ここまでstrTextFile(3)に読み込む
※「空行があるまでが1まとまり」というのは、あくまで例です。3行と決まってるなら、全部つめて3行読んだら次の配列に行くんでもOK。
この回答への補足
ありがとうございます!
「空行があるまで」というのはどのように書けばよろしいのでしょうか?
Do Whileで書こうとしたのですが条件式が分かりません。
何度も質問して申し訳ございません。
No.3
- 回答日時:
#1さんの書かれている
> 質問の通り実行しましたが、Label1には 「CCCC」が表示されます。AAAAが表示されるというのはちょっと考えられません。
を拝見し、私も質問者さんのコードを見て同じ事を思いました。
このコードではLabel1.Captionへの値の代入がLoopの外で行われているので、myTextには最後のレコードである「CCCC」が入っているのと、
代入の対象をLabel1に固定してしまっています。
「AAAA」しか表示されないと言われているので、
一度、Label1の高さを広げてみてください。
案外、
AAAA
BBBB
CCCC
と表示されるかもしれません。
従って、実際に書かれているコードと質問文に書かれたコードとが微妙に異なっているのかも。
No.2
- 回答日時:
VB の学習中のようですので回答の全てを示すべきかどうか迷うところですが・・・。
幾つか気になった点がありましたので・・・。
1、FreeFile が使われていない。
2、FileSystemObject が使われていない。
1点目ですが、
Private Sub コマンド0_Click()
On Error Resume Next
Dim I As Integer
Dim N As Integer
Dim myText As String
N = FreeFile
Open "C:\Temp\myFile.txt" For Input As #N
Do While Not EOF(N)
Input #1, myText
I = I + 1
Me.Controls("label" & I).Caption = myText
Loop
Close #N
End Sub
と、書いたが良いと思います。
ファイル番号をプログラム中に埋め込むと、チトまずいです。
2点目ですが、
Private Sub コマンド1_Click()
On Error Resume Next
Dim I As Integer
Dim N As Integer
Dim strMyTexts() As String
strMyTexts() = FileReadArray("C:\Temp\myFile.txt")
N = UBound(strMyTexts)
For I = 0 To N
Me.Controls("label" & I + 1).Caption = strMyTexts(I)
Next I
End Sub
と、非手続き的に書くスタイルを採用すればバグを相当に追放できます。
※FileSystemObject を用いるには、Microsoft scripting runtime を参照させる必要があります。
この回答への補足
回答ありがとうございます!!
間違いました(汗)「CCCC」です。
申し訳ございませんでした。
早速、FreeFileとFileSystemObjectについて勉強します。
また不明な点があれば宜しくお願い致します。
VB6.0を学習中です。
質問があるのですが、
Me.Controls("label" & I).Caption = myTextの
("label" & I)とはどういう意味なのでしょうか?
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの、ある数式内の{}の意...
-
vbsでテキストファイル内の文字...
-
RichTextBoxの改行を認知してく...
-
エクセルへのデータの貼付時に...
-
VBAのWorksheetFunctionの引数...
-
初心者が簡単なPowerShellスク...
-
Rubyで配列を使ったfor文の中に...
-
これ以上省略することは出来な...
-
変数名の間接指定
-
VBSで特定の文字列が含まれる場...
-
フォームを開くときに、コンボ...
-
[VBS]変数を定数に変換する方法...
-
Excel-vba 文字列と変数を...
-
VBAでダブルコーテーション入り...
-
足して100になるような乱数のア...
-
long型のランダムな値を返す方法
-
EXCEL/VBA 変数の値をクリップ...
-
エラーの意味は? Lvalue req...
-
Variant型で宣言してるのにEmpt...
-
世界のナベアツ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの、ある数式内の{}の意...
-
vbsでテキストファイル内の文字...
-
エクセルへのデータの貼付時に...
-
VBAのWorksheetFunctionの引数...
-
配列の値を置換するにはどうす...
-
VB6で配列を文字列に変換する方...
-
RichTextBoxの改行を認知してく...
-
○桁にある数値を取得する VB.N...
-
ファイルの特定行を取り出したい.
-
COLUMN(1:1)の意味を教え...
-
【エクセル】 関数による電子...
-
VB.NET 2次元配列
-
VBSで特定の文字列が含まれる場...
-
数値を浮動小数点32bitHEXコー...
-
エクセル、この関数の意味は?
-
VB.NET 2つの配列を連動して並...
-
copyRecordsetの数値16桁以上に...
-
VBAで配列に文字列が入らない?
-
in_addrからchar型の文字列の変換
-
初心者が簡単なPowerShellスク...
おすすめ情報