アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/25 14:53

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-->
・・・
の順に次々表示されたが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/25 14:54

もしかして、データの書き込み時、データ設定を以下のようにしたのではないのかな~



TEST_DAT = "ABBCCC" →スペースが設定されるので長さチェックでは分からない。

(正解)
Dat.TEST_A = "A"
Dat.TEST_B = "BB"
Dat.TEST_C = "CCC"
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2008/10/25 14:55

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