• ベストアンサー

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と帰って来るので 値が入ってないのが悪いとはわかるんですが…。

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

  • ベストアンサー
回答No.1

間違いないように見えますが、 試しに、下の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

tarinko_06
質問者

お礼

お礼遅くなってすみません。 書いてもらったコードを新しいブックに張ったら問題解決しました! 結局何が原因で読めなかったのかわかりませんでした。 ありがとうございます。

その他の回答 (2)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

もしかして、データの書き込み時、データ設定を以下のようにしたのではないのかな~ TEST_DAT = "ABBCCC" →スペースが設定されるので長さチェックでは分からない。 ↓ (正解) Dat.TEST_A = "A" Dat.TEST_B = "BB" Dat.TEST_C = "CCC"

tarinko_06
質問者

お礼

回答ありがとうございます。 正解どおりにやってたんですが 何故かできませんでした。 色々いじってたのがいけないんでしょうか…。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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--> ・・・ の順に次々表示されたが。

tarinko_06
質問者

お礼

回答ありがとうございました。