- ベストアンサー
DATファイルが読めません(VB・VBA)
DATの読書きをしなくちゃいけない事になって 元のコードを元に書き出す事はできたのですが 読込みができなくて困っています。構造体の中に値を入れてるんですが msgboxで値を表示しても、空白しか返ってきません。 ネットでも検索してみたんですが、どこがおかしいの分からなくてお手上げです。 どなたか宜しければおかしい所を教えて下さい。 Type TEST_DAT TEST_A as string * 1 TEST_B as string * 2 TEST_C as string * 3 End Type Sub a () Dim Dat as TEST_DAT Dim Fn as integer Fn = FreeFile Open ThisWorkbook.path & "\Test.dat" For Random as #Fn Len = 6 Get #Fn , , Dat Msgbox Dat.TEST_A Msgbox Dat.TEST_B Msgbox Dat.TEST_C Close #Fn End Sub Datファイルの方には、上の構造体を使ってPut #Fn,,Dat の様に書いて1行出力した物をそのまま使っています。 なので、データが無いって事はありません。 元のコードとネットで調べはしたのですが、上で問題無い様な気がして おかしい場所がさっぱりわかりません。エラー等は一切返ってきてません。 Msgbox Len(Dat.TEST_A)の様にすると1,2,3と帰って来るので 値が入ってないのが悪いとはわかるんですが…。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
間違いないように見えますが、 試しに、下のtest()を動かすとどうなりますか。 sub a() はなにも変更していません。 Type TEST_DAT TEST_A As String * 1 TEST_B As String * 2 TEST_C As String * 3 End Type Sub test() Call b Call a End Sub Sub a() Dim Dat As TEST_DAT Dim Fn As Integer Fn = FreeFile Open ThisWorkbook.Path & "\Test.dat" For Random As #Fn Len = 6 Get #Fn, , Dat MsgBox Dat.TEST_A MsgBox Dat.TEST_B MsgBox Dat.TEST_C Close #Fn End Sub Sub b() Dim Dat As TEST_DAT Dim Fn As Integer Dat.TEST_A = "A" Dat.TEST_B = "BB" Dat.TEST_C = "CCC" Fn = FreeFile Open ThisWorkbook.Path & "\Test.dat" For Random As #Fn Len = 6 Put #Fn, , Dat Close #Fn End Sub
その他の回答 (2)
- pkh4989
- ベストアンサー率62% (162/260)
もしかして、データの書き込み時、データ設定を以下のようにしたのではないのかな~ TEST_DAT = "ABBCCC" →スペースが設定されるので長さチェックでは分からない。 ↓ (正解) Dat.TEST_A = "A" Dat.TEST_B = "BB" Dat.TEST_C = "CCC"
お礼
回答ありがとうございます。 正解どおりにやってたんですが 何故かできませんでした。 色々いじってたのがいけないんでしょうか…。
- imogasi
- ベストアンサー率27% (4737/17069)
Getは昔のBasic時代には良く使ったが、最近あまりVBAなどでは使わないので、十分の知識は無いが、 (用意) メモ帳で axyyyzbzwwwqcuwwwrdwrrrt を打ち込み、test.datで保存。 ーーー (VBA) エクセルVBAで、標準モジュールに Sub a() Dim Dat As TEST_DAT Dim Fn As Integer Fn = FreeFile MsgBox ThisWorkbook.Path Open ThisWorkbook.Path & "\Test.dat" For Random As #Fn Len = 6 MsgBox LOF(1) For i = 1 To LOF(1) / 6 Get #Fn, i, Dat MsgBox Dat.TEST_A MsgBox Dat.TEST_B MsgBox Dat.TEST_C Next i Close #Fn End Sub と入れて、Book.xlsで保存(名前は何でも可)。 保存してからで無いと(新規作成中に実行してみると)、MsgBox ThisWorkbook.Pathが空白になって出るから注意。 実行する。 (結果) a ー->xy--> yyz--> b -->zw -->wwq--> ・・・ の順に次々表示されたが。
お礼
回答ありがとうございました。
お礼
お礼遅くなってすみません。 書いてもらったコードを新しいブックに張ったら問題解決しました! 結局何が原因で読めなかったのかわかりませんでした。 ありがとうございます。