Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10311 / 13644 ツリー ←次へ | 前へ→

【22513】ファイルの内容をテキストボックスへ H.T 05/2/23(水) 10:50 質問[未読]
【22520】Re:ファイルの内容をテキストボックスへ G-Luck 05/2/23(水) 12:15 回答[未読]
【22558】Re:ファイルの内容をテキストボックスへ ichinose 05/2/23(水) 18:18 発言[未読]

【22513】ファイルの内容をテキストボックスへ
質問  H.T  - 05/2/23(水) 10:50 -

引用なし
パスワード
   Textbox1にsample.txtの内容を入力したのですが、
「レコード長が一致しない」というエラーがでてしまいます。
誤っている個所を教えていただければうれしいです。

sample.txtの内容は以下の一行のみです。
あいうえお

記述しているマクロは以下です。
Private UserForm_Initialize()
  
  Dim FileName As String 'ファイル名
  Dim FileNo  As Long  'ファイル番号
  Dim FileLen As Long  'ファイルの長さ
  Dim Buff   As String 'ファイルの内容を格納する変数
  
  'ファイルの長さを取得
  FileName = "sample.txt"
  FileNo = FreeFile
  Open FileName For Random As #FileNo
  FileLen = LOF(FileNo)
  Close FileNo
  
  'ファイルの内容一つのレコードとして読み出す
  Open FileName For Random As #FileNo Len = FileLen
  Get #FileNo, 1, Buff
  TextBox1.Text = Buff
  Close FileNo
  
End Sub

【22520】Re:ファイルの内容をテキストボックスへ
回答  G-Luck  - 05/2/23(水) 12:15 -

引用なし
パスワード
   ▼H.T さん:
>Textbox1にsample.txtの内容を入力したのですが、
>「レコード長が一致しない」というエラーがでてしまいます。
>誤っている個所を教えていただければうれしいです。
>
>sample.txtの内容は以下の一行のみです。
>あいうえお
>
>記述しているマクロは以下です。
>Private UserForm_Initialize()
>  
>  Dim FileName As String 'ファイル名
>  Dim FileNo  As Long  'ファイル番号
>  Dim FileLen As Long  'ファイルの長さ
>  Dim Buff   As String 'ファイルの内容を格納する変数
>  
>  'ファイルの長さを取得
>  FileName = "sample.txt"
>  FileNo = FreeFile
>  Open FileName For Random As #FileNo
>  FileLen = LOF(FileNo)
>  Close FileNo
>  
>  'ファイルの内容一つのレコードとして読み出す
>  Open FileName For Random As #FileNo Len = FileLen
>  Get #FileNo, 1, Buff
>  TextBox1.Text = Buff
>  Close FileNo
>  
>End Sub
G-Luckといいます。

Private Sub UserForm_Initialize()
  
  Dim FileName As String 'ファイル名
  Dim FileNo  As Long  'ファイル番号
  Dim FileLen As Long  'ファイルの長さ
  Dim Buff   As String * 5 'ファイルの内容を格納する変数
  
  'ファイルの長さを取得
  FileName = "sample.txt"
  FileNo = FreeFile
  
  'ファイルの内容一つのレコードとして読み出す
  Open FileName For Random As #FileNo
  Get #FileNo, 1, Buff
  TextBox1.Text = Buff
  Close FileNo
  
End Sub

これでどうでしょうか?
詳細は不明です。実行してたまたまうまくいきました。

【22558】Re:ファイルの内容をテキストボックスへ
発言  ichinose  - 05/2/23(水) 18:18 -

引用なし
パスワード
   H.T さん、G-Luckさん、こんばんは。

>Textbox1にsample.txtの内容を入力したのですが、
>「レコード長が一致しない」というエラーがでてしまいます。
>誤っている個所を教えていただければうれしいです。
>
>sample.txtの内容は以下の一行のみです。
>あいうえお

テキストファイルを読み込むのにどうしてRandomモードでOpenしたでしょうか?
Openステートメントを使用してテキストファイルを読み込む場合は、
普通は、Line Input ステーメントで読み込みます。
それとも何か理由があるのでしょうか?

sample.txtが上記の例の場合だとして。
ユーザーフォーム(Userform1)には、
 テキストボックス(Textbox1)を配置して下さい。
 Textbox1のHeightプロパティは、事前設定で60ぐらいに設定しておいてください


UserfromのInitializeイベントではなくてShowメソッドの前でテキストボックスに
sample.txtから読み込んだ内容を設定したコードです。
Initializeがいけないと言うのではなく、いくつかサンプルコードを作ったので
説明の都合上です。

標準モジュールに
'=================================================
Sub main()
  Dim FileName As String
  Dim FileNo  As Long
  Dim Buff   As String
  Load UserForm1
  With UserForm1
   FileName = "D:\My Documents\sample.txt"
   FileNo = FreeFile()
   Open FileName For Input As #FileNo
   Line Input #FileNo, Buff
   With .TextBox1
    .Text = Buff
    End With
  Close FileNo
  .Show
  End With
End Sub
とすれば、テキストファイルの内容は読み込めます。

仮にsample.txtの内容が

あいうえお
かきくけこ

この2行に増えたとしましょう。

'=====================================================
Sub main2()
  Dim FileName As String
  Dim FileNo  As Long
  Dim Buff   As String
  Load UserForm1
  With UserForm1
   FileName = "D:\My Documents\sample.txt"
   FileNo = FreeFile()
   Open FileName For Input As #FileNo
   Do Until EOF(FileNo)
    Line Input #FileNo, Buff
    With .TextBox1
     .MultiLine = True
     .Text = .Text & Buff & vbCrLf
     End With
    Loop
  Close FileNo
  .Show
  End With
End Sub

とすれば、2行が表示されるはずです。
この方法では、何か問題があるのでしょうか?

Getステートメントを使用してVbCrLfまで読み込みたいと言うなら

'===================================================
Sub main3()
  Dim FileName As String
  Dim FileNo  As Long
  Dim Buff As String
  Load UserForm1
  With UserForm1
   FileName = "D:\My Documents\sample.txt"
   FileNo = FreeFile()
   Open FileName For Binary As #FileNo
   Buff = String(LOF(FileNo), " ")
   Get #FileNo, , Buff
   With .TextBox1
   .MultiLine = True
   .Text = Buff
   End With
  Close FileNo
  .Show
  End With
End Sub

こんな方法で出来そうですが、テキストファイルに使用した事はありません。

以上、確認してみて下さい。

10311 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free