前に「あいうえお」のような一行を表示させるプログラムについてお聞きしたんですけど、今度は一行目に「あいうえお」二行目に「かきくけこ」三行目に「1234567890」四行目に「abcd」のように一度に四行、またはそれ以上を表示させたいんです。
それで次のようにプログラムを作ったんですが最後の行のabcdが表示されるだけでした。

Private Sub Command1_Click()
Dim strWork As String
Open "c:\mydata\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, strWork
Loop
Close #1
MsgBox strWork
End Sub

全部表示させるにはどうすればいいかお願いします。

このQ&Aに関連する最新のQ&A

F1 情報」に関するQ&A: F1 鈴鹿観戦情報

A 回答 (4件)

strWork が更新されて、最後の一文だけの情報になってます。



Private Sub Command1_Click()
Dim strWork As String
Open "c:\mydata\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, strWork
MsgBox strWork
Loop
Close #1
End Sub

メッセージボックスの場所を変えてみましょう
    • good
    • 0
この回答へのお礼

ありがとうございました、strworkが更新されてたんですか(^^;
これからも勉強します。

お礼日時:2001/11/17 16:28

まずは回答


Private Sub Command1_Click()
Dim strWork As String
Dim strInputBuff As String
Open "c:\mydata\test.txt" For Input As #1
strWork = ""
Do While Not EOF(1)
Line Input #1, strInputBuff
strWork = strWork & strInputBuff & vbCrLf
Loop
Close #1
MsgBox strWork
End Sub

ここから説明
Do
Line Input #1, strWork
Loop
とするとループ1回目の"strWork"は「あいうえお」で
ループ2回目は「かきくけこ」です、3回目は「1234567890」、4回目は「abcd」が各々上書き設定されます。
5回目はEOFの為ループを抜けます。
よって最後の「abcd」がメッセージボックスとして表示されるという事です。

ですから回答のように一度別の変数へ追加しながら代入する必要があります。なお、「vbCrLf」は改行です。
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございます。vbCrLfは改行なんですね(^^;
ありがとうございました。

お礼日時:2001/11/17 16:31

こんにちは。

maruru01です。
このコードではtest.txtの最後の行しかstrWorkに格納されません。
1行ずつ読んでつなげていく必要があります。
次のようにします。
なお、ファイル番号は、FreeFile関数を使った方が確実です。
では。

Private Sub Command1_Click()

  Dim temp As String
  Dim strWork As String
  Dim fileNum As Integer

  fileNum = FreeFile
  strWork = ""
  Open "c:\mydata\test.txt" For Input As #fileNum
  Do While Not EOF(fileNum)
    Line Input #fileNum, temp
    strWork = strWork & temp & vbCrLf
  Loop
  Close #fileNum

  MsgBox strWork

End Sub
    • good
    • 0
この回答へのお礼

こんにちは^^こういうやりかたもあったんですね、ありがとうございました。FreeFile関数についてわからないので学習しようと思います。

お礼日時:2001/11/17 16:33

ようするにテキストファイルの中身を


メッセージボックスに表示したいという事ですよね。

DO WHILE NOT EOF(1)
LINE INPUT #1,BUFF1
BUFF1=BUFF1+CHR(13)+CHT(10)
BUFF2=BUFF2+BUFF1
LOOP

参考まで。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。そうなんです、テキストファイルの中身を
メッセージボックスに表示したいんですがうまくいかなくて(^^;
やってみますね、ありがとうございました。

お礼日時:2001/11/17 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

よろしくお願いいたします。

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む

QVB6「コピー中のファイルをオープンしてinput #はするか?

VB6 WinXP等 ですが、(おそらくOSが)コピーしているファイルに対して(コピー先のファイル)をOPENしてinput #はするか(しないか)どうか疑問なのですが。当然、コピー先のファイルはコピー中なら不完全なので、OPENしてinput してしまうと不都合が生じるので。別のプロセスで開かれている場合はエラーが出るというですが・・・。大きなテキストファイルを作って自力でテストする必要があるでしょうか?OSの仕様に詳しいかたよろしくおねがいいたします。

Aベストアンサー

オープン時にロックかければよい。
コピー中のファイルはロックできずオープンエラーになる。

QLINE INPUT # の動作がExcel2002と2003で異なる

お世話になります。
色々な実行環境があるので苦労しています。

Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。
(どちらもWindowsXpSp3上で動いています)

VBAでプログラムを書き、それぞれ(2003,2002)で動かしています。

読み込みファイルはCSV(行区切りは「0x0A])です。
このCSVファイルを"LINE INPUT #"で読み出すと、
Excel2003:「0x0A]を区切りに行単位でリードされる。
Excel2002:「0x0A]は無視されCSVファイル全体がリードされる。

コードは
---------------
dim strLineBuffer as String
ファイルオープン
Line Input #1, strLineBuffer
---------------
のような感じです。

ヘルプとかには「"LINE INPUT #"は「0x0A]は無視される」との
記載が多いですが、今、直面している場面では、
『「0x0A]は無視される』ものと『「0x0A]は無視されない』ものがあります。
とりあえずは、
FileSystemObjectのReadFile.readline
で2003も2002も同じ動作になりましたので、それを使用しています。

質問は、
「Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。」が本当なのかどうなのかという点です。
開発環境によって色々なパッチやアップデートが行われているような状況です(把握しきれません)。

経験された方、情報をお持ちの方、よろしくお願します。

お世話になります。
色々な実行環境があるので苦労しています。

Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。
(どちらもWindowsXpSp3上で動いています)

VBAでプログラムを書き、それぞれ(2003,2002)で動かしています。

読み込みファイルはCSV(行区切りは「0x0A])です。
このCSVファイルを"LINE INPUT #"で読み出すと、
Excel2003:「0x0A]を区切りに行単位でリードされる。
Excel2002:「0x0A]は無視されCSVファイル全体がリードされる。

コードは
---------------
dim...続きを読む

Aベストアンサー

>バイナリーエディターで何度も確認しました。
0Aの前に0Dがあれば、それは0D0Aなのですがそうはなっていないと
いうことですよね?
うーん。エクセルで適当なデータを作ってcsv保存しても改行コードは
0D0Aでしたし、メモ帳で作っても0D0Aだったんですけどね。。
どうすれば0Aになるのかが分かりませんね。
0D0AになればLINE INPUT #でも取り込めると思うのですが。。

あと気になるのは
>Excel2003:「0x0A]を区切りに行単位でリードされる。
てとこですが、私の場合バイナリエディタで改行コードを0Aにして試したら
CSVファイル全体が読み込まれました。(行単位で読まない)
同じexcel2003でも挙動が違うのは不可解です。

ちなみにコードは下記で試しました。参考までに。
Sub test()
Dim buf As String
Open "c:\work\aaa.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
MsgBox buf
Loop
Close #1
End Sub

>バイナリーエディターで何度も確認しました。
0Aの前に0Dがあれば、それは0D0Aなのですがそうはなっていないと
いうことですよね?
うーん。エクセルで適当なデータを作ってcsv保存しても改行コードは
0D0Aでしたし、メモ帳で作っても0D0Aだったんですけどね。。
どうすれば0Aになるのかが分かりませんね。
0D0AになればLINE INPUT #でも取り込めると思うのですが。。

あと気になるのは
>Excel2003:「0x0A]を区切りに行単位でリードされる。
てとこですが、私の場合バイナリエディタで改行コードを...続きを読む

Qsubプロシージャーですか?subステートメン

----------------
Sub test()

End Sub
----------------
は、subプロシージャーですか?subステートメントですか?

上記のコードの「Sub」にカーソルをあて、F1を押すとヘルプが立ち上がり「Sub ステートメント」と表示されますが、

挿入(I)→プロシージャー(P)を見ると画像のように「Subプロシージャー」となっています。

どちらが正しいのでしょうか?
どちらも正しいのでしょうか?

Aベストアンサー

Sub~という構文が「Subステートメント」。プログラミング言語では、ステートメントは「文」とも訳されます。
そのSub~End Subで定義した一連のものが「Subプロシージャ」。プロシージャは「手続き」とか言う意味。

だから、Subのヘルプを見ると、Subステートメントの書式などになってるし、
挿入→プロシージャでは、「手続き」とての一かたまりを挿入するから、End Subまでになる。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。


人気Q&Aランキング

おすすめ情報