Visual Basic 6.0でファイル内容をリストボックスに出力する方法

このQ&Aのポイント
  • Visual Basic 6.0のプログラムで、ファイルから読み込んだ内容をリストボックスに出力する方法について質問があります。
  • 質問者は「修飾子が不正です」というコンパイルエラーが発生し、実行できない状況に困っています。
  • 質問者はファイルの内容を最後まで読み込んでリストボックスに表示するために、どのようなコードを記述すればよいかわかりません。初心者なので、詳しい解説をお願いします。
回答を見る
  • ベストアンサー

コンパイルエラー「修飾子が不正です。」

Visual Basic 6.0を使用しています。 タイトル通りですが、エラーが発生し解決できなくて困っています。 やりたいことは、リストボックスに、ファイルから読み込んだ内容を出力することです。 ' ファイルオープン intNo = FreeFile() Open txtReadFile For Input As #iFileNumber Dim stResult As String ' ファイルを最後まで読み込む Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine 'ファイル内容をリストボックスへ表示 ListBox1.AddItem stBuffer, stResult TextBox1.Text = txtReadFile.ReadToEnd ←★エラー Loop Close #iFileNumber Call MsgBox(stResult) End Sub 検索し似た問題の方のも見たのですが、よくわかりませんでした。 初心者です。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5646)
回答No.1

「リストボックスに、ファイルから読み込んだ内容を出力する」には「TextBox1」は不要だと思うので、エラーの行を削除してみてください。

wakawaka23
質問者

お礼

リストボックスの名前を変更し、テキストボックスのエラー行を消したらうまくできました! ありがとうございます!

wakawaka23
質問者

補足

回答ありがとうございます。 エラーの行を削除してみたところ、 ListBox1.AddItem stBuffer, stResultにて、 オブジェクトが必要です。とエラーになってしまいます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.4

StreamReaderクラスを使用してみてはいかがでしょう。 文字コードを指定してテキストファイルを読み込む https://dobon.net/vb/dotnet/file/readfile.html

  • emsuja
  • ベストアンサー率50% (1034/2055)
回答No.3

補足拝見しましたが・・・・ 申し訳ございませんが、エラーが発生するならば、そのエラーの発生個所までは正常に動作して、ご指摘のエラーヶ所でエラーが発生するソースを提示いただけませんでしょうか? 補足で提示されたソースでは前回私が指摘した intNo と #FileNumber の件も未解決のままですし、今回のソースでも起動直後にご指摘の行のもっと手前でエラーが発生してしまいます。 今回ご提示のソースを見ると ' ファイルが存在しているかどうか確認する If Dir(txtReadFile) = "" Then Call MsgBox("ファイルは存在しません") End If の行など、ファイルが見つからなくても、「ファイルは存在しません」のメッセージを出してそのまま走っていますので、次の Open ステートメントでエラーが出るのは必至です。 まぁ それ以前の問題としてまだ何か不足しているモジュールがある感じがしますね。 最初にご提示いただいた、エラー現象だけは前回私が提示した修正で解決すると思うのですが、それではいけないのでしょうか?

  • emsuja
  • ベストアンサー率50% (1034/2055)
回答No.2

どこかからコピーしてきたプログラムなのでしょうか? 少々辛めのコメントになりますが、提示されたプログラムをそのまま貼り付けた上で ListBox1 TextBox1 をフォームに張り付けて動作させても質問者殿が ←★エラー と書かれた行までたどり着けませんでした。(もっと前の行でエラー停止します) そもそも、一行目で intNo = FreeFile() と書いてあるにも関わらず 二行目で Open txtReadFile For Input As #iFileNumber と書いてあること自体意味不明です #iFileNumber には、もっと別な場所で数値が入れられているのでしょうか? トラブルの元ですのでそのようなことするべきではありません。 とりあえず一応動作するようには書き直したのですが、TextBox1 の使い方が今一つ分かりません。 Sub test() txtReadFile = "E:\TestData.txt" ' 【当方のテスト用ファイルを指定する行を追加】 intNo = FreeFile() Open txtReadFile For Input As intNo '#iFileNumber 【修正】 Dim stResult As String ' ファイルを最後まで読み込む Do While (Not FileSystem.EOF(intNo)) ' 'iFileNumber)) 【修正】 Dim stBuffer As String Line Input #intNo, stBuffer ' #iFileNumber, stBuffer 【修正】 stResult = stResult & stBuffer & vbNewLine 'ファイル内容をリストボックスへ表示 ListBox1.AddItem stBuffer ', stResult TextBox1.Text = txtReadFile '.ReadToEnd ' ←★エラー 【修正】 Loop Close intNo ' #iFileNumber 【修正】 End Sub

wakawaka23
質問者

補足

emusuja様 回答ありがとうございます。 情報が少なく申し訳ありませんでした。 一部分を切り取って質問してしまいました。 下記が現在のコードです。 Private Sub cmd_Click() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Dim cFso As FileSystemObject Set cFso = New FileSystemObject ' ファイルパスからファイル名を取得する Dim txtReadFile As String txtReadFile = cFso.GetFileName("c:\tmp\read.txt") ' 不要になった時点で参照を解放する (Terminate イベントを早めに起こす) Set cFso = Nothing ' ファイル名を表示する Call MsgBox(stFileName) ' ファイルを開く txtReadFile = Me.txtReadFile.Text ' ファイルが存在しているかどうか確認する If Dir(txtReadFile) = "" Then Call MsgBox("ファイルは存在しません") End If ' ファイルオープン intNo = FreeFile() Open txtReadFile For Input As #iFileNumber Dim stResult As String ' ファイルを最後まで読み込む Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine 'ファイル内容をリストボックスへ表示 ListBox1.AddItem stBuffer, stResult TextBox1.Text = txtReadFile.ReadToEnd ←★エラー Loop Close #iFileNumber Call MsgBox(stResult) End Sub

関連するQ&A

  • リストボックスの内容を テキストファイルに出力

    エクセル vba初心者です。 (1)ini fileからデータを取得 (2)その内容のリストボックスに表示 (3)リストボックス内容をテキストボックスに出力 (2)、(3)がわかりません。 なんとなくやってたら余計にわからなくなりました。助けてください。 Private Sub CommandButton1_Click() '読込み(1)を押した時の処理 Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    ListBox1.Clear   Open "C:\filepath.ini" For Input As #n Do While Not EOF(n) Line Input #n, listbox ListBox1.AddItem listbox Loop Close #n End Sub Private Sub CommandButton2_Click() '書込み(1)を押した時の処理  Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    Open "c:\example.txt" For Output As #n Print #n, strL_Data Close #n End Sub よろしくお願いいたします。

  • ☆文字列を抜き取る★

    テキストファイルに GetPoint = ErrMsg("おはよう",target) の行があるとします。 ダブルクオートでくくられた文字列だけを出力させたい場合 下記コードでどこが間違っているでしょうか?? 今のままだと全てのコードが出力になるんですよ。。。 アドバイスをいただけると幸いです。 Sub Main() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Open "C:temp\sample.txt" For Input As #iFileNumber Dim stResult As String Dim stSerch As String Dim point As Long Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine If Instr(stResult,Chr(34)) > 0 Then If Instr(stResult,Chr(34)) > 0 Then v = stResult End If End If Loop Close #iFileNumber End Sub

  • [コンパイルエラー 修飾子が不正です]

    ユーザフォームに「ユーザ名」を入力します。  (1)テキストボックスの入力有無の確認  (2)ユーザ名の重複の確認 上記を実行させようとしているのですが、「コンパイルエラー 修飾子が不正です」が表示 されてしまいます。 にわか覚えのVBAでどうしたらよいか・・わかりません。 ご教授願います。。m(__)m。。 **********以下 '[登録ボタン]を押した時の処理 Private Sub user_touroku_button_Click()   ←★ここでエラー発生!! '------------------------------------------------- Dim check As Long '重複有無 Dim rowsCount As Long '表の現在行数 '必須項目のチェック(ユーザ名) If user_txt.Text = "" Then MsgBox "ユーザ(案件)名を入力してください。", vbExclamation, "入力エラー" user_txt.Text.SetFocus Exit Sub End If 'ユーザ名の重複チェック On Error Resume Next check = 0 check = WorksheetFunction.Match(user_txt.Text, Range("ユーザ一覧").Columns(5), 0) On Error GoTo 0 If check > 0 Then MsgBox "このユーザ(案件)名はすでに登録されています", vbExclamation, "重複エラー" user_txt.Text.SetFocus Exit Sub End If '----------------------------------------------------- よろしくお願いします。

  • テキストファイルへの書き出し

    ExcelVBAについて教えてください。 Dim path As String Dim FullPath As String Path ="C:\" Dim FN As String FN ="abc.txt" Dim intFF As Integer intFF = FreeFile FullPath = Path & "\" & FN Open FullPath For Output As #intFF Print #intFF, FullPath Close #intFF とやると、Open FullPathのところで、実行時エラー 76、パスが見つかりませんと表示されてしまいます。 やりたいことは、Excel VBAでテキストファイルを新規につくり、そこへ書き出し、保存したいです。ファイル名はFullPathで指定したファイル名を新規で作り出し、それに対して書き出し、保存をしたいです。 何が間違っているのでこのようなエラーが表示されてしまうのでしょうか?回避方法がありましたらご教授お願いいたします。

  • リストボックスで選択した項目に該当するデーターをラベルに表示する

    よろしくお願いします ユーザーフォームにリストボックスが2つ ラベルが1つ 配置しています。 リストボックス1で選択した項目に該当するリストを リストボックス2に表示する。 次に リストボックス2で選択した項目に該当するデーターを ワークシートのセル(E5:E300)から選んで ラベル1に表示する。 このようにしたいのですがエラーが出ます。 Dim LastRow As Long Dim DstRow As Long Const FstRow As Long = 5 Dim MctRow As Long   -  -  - Private Sub UserForm_Initialize() With Me.ListBox1 .RowSource = Worksheets("入力").Range("A5:A300").Address(External:=True) End With End Sub   -  -  - Private Sub ListBox1_Click() Dim j As Integer Dim RowCnt As Long With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row ListBox2.Clear For RowCnt = 5 To LastRow If ListBox1.List(ListBox1.ListIndex) = .Cells(RowCnt, 3).Value Then ListBox2.AddItem For j = 0 To 1 ListBox2.List(ListBox2.ListCount - 1, j) = .Cells(RowCnt,5 + j).Value Next j End If Next RowCnt End With End Sub   -  -  - Private Sub ListBox2_Click() Dim SrcCode As Long SrcCode = ListBox2.List(ListBox2.ListIndex, 0)     ↑    ↑    ↑ ここでエラーになります。 実行時エラー 型が一致しません と表示されます With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row MctRow = Application.WorksheetFunction.Match(SrcCode, .Range("E5:E" & LastRow), 0) + 5 Label1 = Format(.Cells(MctRow, 5)) End With End Sub

  • Excelで作成されたCSVのVBでの読み込み

    いつもお世話になっております。 Excel2K、2002を使用しております。 Excelで作成されたCSVファイルをVBAで読み込もうと、以下の関数を作成しました。 Public Function CsvRead(ByVal FileName As String)   Dim IntFileNum As Integer 'ファイル番号   Dim TmpStr As String '   IntFileNum = FreeFile   Open FileName For Input As #IntFileNum 'CSVファイルのオープン   Do Until EOF(IntFileNum)     Input #IntFileNum, TmpStr     '     '~その他の処理~     '   Loop   Close End Function その他の処理中で特定の列に対し、特殊な処理を行う必要があるのですが ExcelでCSVファイルを作成する場合、16行単位でカンマの変動が起こりえますので、 http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B400253 正確な列が取れません。 そこで1行読み込んでカンマで分解すればよいかと思い、 以下のように読み込んでみたのですが、、   Dim TmpStr() As String '   Dim LineStr As String   IntFileNum = FreeFile   Open FileName For Input As #IntFileNum 'CSVファイルのオープン   Do Until EOF(IntFileNum)     Line Input #IntFileNum, LineStr     TmpStr = Split(LineStr, ",")     '     '~その他の処理~     '   Loop 値にカンマが存在する場合も区切ってしまうので これも正しく取れませんでした。 値のカンマは区切り文字として判定せず、 正しく値を取得するにはどのようにすればよいでしょうか。 上記のことをふまえた判定をすべて行うしかないでしょうか。 ご教授のほど、よろしくお願いいたします。

  • "プロシージャの呼び出し、または引数が不正です"というエラーが出ました

    "プロシージャの呼び出し、または引数が不正です"というエラーが出ました。原因がよく分かりませんので、誰か分かりますか? Dim ExcelPath As String, fName As String Dim lLen As Long, start As Long Dim filetxt Dim bArray() As Byte fName = Workbooks.Application.ActiveWorkbook.Path & "\ExcelDoc.txt" lLen = FileLen(fName) Open fName For Binary As #1 ReDim bArray(0 To lLen) Get #1, 3, bArray Close #1 filetxt = bArray ExcelPath = Left(filetxt, InStr(1, filetxt, Chr(13)) - 1) ==>ここでエラーが出ました。 使っている環境は: WinXP SP3 Microsoft Excel 2003 SP3

  • エクセル2000マクロエラー

    下記のマクロを記述を記載していますが Open path + finame For Input As #1→でファイルがありませんという エラーがでます。c:\aa着色加工計画\testにファイル(T_Sort.csv)はあるみたいなのですが 教えてください。何が原因でしょうか Sub Do_shukei() Dim 処方(1) As String, 品名(1) As String Dim 倉庫(1) As String Dim tuki(15) As String, sort(1) As String, st As Integer Dim sihan(8) As Long, zaiko As Long, suryo(15) As Long Dim ryo(6) As Long, a As Integer, i As Integer Dim path As String, finame As String, foname As String st = 1 a = 1 For i = 1 To 15 suryo(i) = 0 Next i path = "c:\aa着色加工計画\test" finame = "T_Sort.csv" foname = "T_shukei.csv" Open path + foname For Output As #2 Open path + finame For Input As #1 Do Until EOF(1) = True If a = 1 Then Input #1, sort(0), 倉庫(0), 処方(0), 品名(0), tuki(1), tuki(2), tuki(3), tuki(4), tuki(5), tuki(6), tuki(7), tuki(8), tuki(9), tuki(10), tuki(11), tuki(12), tuki(13), tuki(14), tuki(15) Write #2, sort(0), 倉庫(0), 処方(0), 品名(0), tuki(1), tuki(2), tuki(3), tuki(4), tuki(5), tuki(6), tuki(7), tuki(8), tuki(9), tuki(10), tuki(11), tuki(12), tuki(13), tuki(14), tuki(15) a = 0 GoTo l 下記省略

  • 「パスが見つかりません」というエラー

    data.txtにセルの入力内容を出力したくて下記のようなプログラムを書きました。 ところが Open StrFN For Output As #IntFlNo のところで パスが見つかりません というエラーが出てしまいます。原因はわかりますでしょうか。 Sub test() Dim StrFN As String Dim i As Long Dim IntFlNo As Integer StrFN = "c\data.txt" IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 2 To 400000 Write #IntFlNo, Cells(i, 1) & "$" & Cells(i, 2) Next i Close #IntFlNo End Sub

  • ExcelVBAで、隠しフォルダにあるファイルに書き込みする方法

    お世話になります。 ExcelVBAで、ネットワーク上の隠しフォルダ(....$で開く ことができる場所のことです)に、テキストファイルの書き 込みをしたいのですが、outputのところで『パス名が無効です』と 表示され、書き込みを行うことができません。 inputで読み込みを行う際には問題なくできるのですが、どうして 書き込みはできないのでしょうか。 原因と対処法を教えてください。 下記が、その例です。 Public Function readText(ByVal stFileName) As String Dim ch1 As Long Dim textline As String Dim stAllText As String readText = "" '空いているファイル番号を取得します ch1 = FreeFile Close #ch1 'FileNamePath のファイルをオープンします Open stFileName For Input As #ch1 'エラーが発生したらファイルを閉じます On Error GoTo Err_readText stAllText = "" '最初に1行だけ読み込む Line Input #ch1, textline stAllText = textline Do While Not EOF(ch1) 'ファイルの終端かどうかを確認します。 '1行読み込みます Line Input #ch1, textline ' 文字列を連結する。 stAllText = stAllText & vbCrLf & textline Loop Close #ch1 readText = stAllText Exit Function Err_readText: Close #ch1 MsgBox Err.Description, vbExclamation, sysName End Function ↑↑↑readは成功します。 Public Function writeText(ByVal stFileName, ByVal stBuff) As Boolean On Error GoTo ErrMsg ' ファイルポインタ Dim n As Long n = FreeFile Open stFileName For Output As #n  ← ここでエラーになる。 Print #n, stBuff Close #n writeText = True Exit Function ErrMsg: ' エラー時処理 MsgBox Err.Description, vbCritical, sysName writeText = False End Function ↑↑↑書き込みではエラーになります。 以上、よろしくお願いいたします。

専門家に質問してみよう