トップ回答者
VB6 / ファイル読み込み、コンパイルエラー

質問
-
質問ばかりで申し訳ございません。
>箇所です。
以下のことをしたいです。まず、ローカルにファイルを作成します。⇒ c:\test.txt
このファイル値は不定でabc, ABCD, abcdeであったりします。Dim value As String * 10
'ファイル読み込み
Private Function dataread() as String
Dim testfile as String
Open "c:\test.txt" For Input as #testfile
Close #testfile
End Function
>ファイル読み込みは、これでOKですか?value=dataread()
>10桁のvalueエリアに入る値はどのように判定されますか?
例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
valueエリアには"abc"だけ入るようにしたいです。>これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
"End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。"
下行の初期各変数宣言の後に置くとコンパイルエラーは消えます。
原因が解りません。>画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく実行できません。
出来たらここに置いて最初に実行したいのです。
回避策はございますか?'0' を読み込めません。
行 0: ファイル C:\Control.ctl が読み込めません。
回答
-
>ファイル読み込みは、これでOKですか?
Private Sub Command1_Click() Dim value As String value = dataread End Sub Private Function dataread() As String Dim testfile As String Open "C:\test1.txt" For Input As #1 Input #1, testfile 'abc 'Input #1, testfile 'ABCD 'Input #1, testfile 'abcde Close #1 dataread = testfile End Function
>10桁のvalueエリアに入る値はどのように判定されますか?
例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
valueエリアには"abc"だけ入るようにしたいです。Dim value As String * 10を使うと、文字の後にスペースが入り常に10文字となる
ので不要ではないでしょうか?
n = Len(Trim(value)) でスペースを取り除き確認できます。>これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
"End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。"
下行の初期各変数宣言の後に置くとコンパイルエラーは消えます。
原因が解りません。VBAでも、VB6でも同じで、変数の宣言や関数の宣言場所に若干ルールが有ります。
グローバル変数、ローカル変数、命令文の場所など、私は、サンプルを入力しながら
覚えたようです。『これは、変数を宣言する場所と宣言の方法による違いです。』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html>画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく
実行できません。 出来たらここに置いて最初に実行したいのです。 回避策はございますか?
フォームを表示する前に処理するものを書きます。
Private Sub Form_Load()この一連の処理を入れます。
'0' を読み込めません。
行 0: ファイル C:\Control.ctl が読み込めません。
End Subボタンや、テキストボックスを張り付けるフォームをダブルクリックすると
Private Sub Form_Load() End Subが自動作成されます。
すべての返信
-
>ファイル読み込みは、これでOKですか?
Private Sub Command1_Click() Dim value As String value = dataread End Sub Private Function dataread() As String Dim testfile As String Open "C:\test1.txt" For Input As #1 Input #1, testfile 'abc 'Input #1, testfile 'ABCD 'Input #1, testfile 'abcde Close #1 dataread = testfile End Function
>10桁のvalueエリアに入る値はどのように判定されますか?
例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
valueエリアには"abc"だけ入るようにしたいです。Dim value As String * 10を使うと、文字の後にスペースが入り常に10文字となる
ので不要ではないでしょうか?
n = Len(Trim(value)) でスペースを取り除き確認できます。>これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
"End Sub、End FunctionまたはEnd Property以降にはコメントのみが記述できます。"
下行の初期各変数宣言の後に置くとコンパイルエラーは消えます。
原因が解りません。VBAでも、VB6でも同じで、変数の宣言や関数の宣言場所に若干ルールが有ります。
グローバル変数、ローカル変数、命令文の場所など、私は、サンプルを入力しながら
覚えたようです。『これは、変数を宣言する場所と宣言の方法による違いです。』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html>画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく
実行できません。 出来たらここに置いて最初に実行したいのです。 回避策はございますか?
フォームを表示する前に処理するものを書きます。
Private Sub Form_Load()この一連の処理を入れます。
'0' を読み込めません。
行 0: ファイル C:\Control.ctl が読み込めません。
End Subボタンや、テキストボックスを張り付けるフォームをダブルクリックすると
Private Sub Form_Load() End Subが自動作成されます。 -
ありがとうございます。
質問ばかりで申し訳ございません。
>箇所です。>テストしていなのですがC:\test1.txtが存在しないときは、null値が返されるますか?それとのループ状態になりますか?
>上記、dataread()をタイマーコントロールは以下のようにしますがOKですか? Interval値は3秒にします。
TimeOut = False
Timer1.Interval = 3000
Timer1.Enabled = TruePrivate Sub Timer1_Timer()
Do While dataread() < 3
DoEvents
If TimeOut = True Then
Exit Do
End If
Loop
End Sub>タイムアウトを起こしたときの、返り値はnull値が返されるますか?
-
Fuda1です。
>箇所です。
どこでしょう?>テストしていなのですがC:\test1.txtが存在しないときは、null値が返されるますか?それとのループ状態になりますか?
「実行エラー’62’:
ファイルにこれ以上データーがありません。」
こんなエラーがでます。>上記、dataread()をタイマーコントロールは以下のようにしますがOKですか? Interval値は3秒にします。
Dim TimeOut As Boolean Private Sub Command1_Click() Timer1.Enabled = True Debug.Print "スタート 3秒待ちです。" End Sub Private Sub Command2_Click() Timer1.Enabled = False Debug.Print "停止しました。" End Sub Private Function dataread() As String Dim testfile As String Open "c:\test1.txt" For Input As #1 Input #1, testfile 'abc Close #1 dataread = testfile End Function Private Sub Form_Load() Timer1.Enabled = False Timer2.Enabled = False Timer1.Interval = 3000 Timer2.Interval = 10000 TimeOut = False End Sub Private Sub Timer1_Timer() Dim strReadData As String Timer2.Enabled = True strReadData = dataread() Do While Len(strReadData) < 3 DoEvents If TimeOut = True Then Debug.Print "タイムアウトです。" Timer1.Enabled = False Exit Do End If strReadData = dataread() Loop Debug.Print strReadData Timer2.Enabled = False End Sub Private Sub Timer2_Timer() TimeOut = True End Sub
タイムアウトは、若干修正してあります。『タイムアウトを起こしたときの、返り値はnull値が返されるますか?』
このプログラムでは無しです。- 編集済み 電子の妖精 2012年7月31日 3:08
-
Fuda1です。
>プログラムでは無しです。
strReadData = "" '無しとはこういうことですか?>null値が返るようにする方法はございますか?
Private Sub Timer1_Timer() Dim strReadData As String Timer2.Enabled = True strReadData = dataread() Do While Len(strReadData) < 3 DoEvents strReadData = dataread() If TimeOut = True Then Debug.Print "タイムアウトです。" Timer1.Enabled = False strReadData = "" Exit Do End If Loop If strReadData = "" Then Debug.Print "ヌルです。" Else Debug.Print strReadData End If Timer2.Enabled = False End Sub
「null値が返るようにする方法」どこに返したら宜しいのでしょうか?
>Timer1、Timer2はタイマーのプロパティですね?
「ツールボックス」にございます「タイマー」をフォームに貼り付け、タイマーをダブルクリックすると自動で作成された関数で、タイマーイベントで、指定した間隔で呼び出され実行されます。
-
「質問」の仕方が、大変マズいと思います。
>箇所です。
多くの場合、大なり記号は、他の人の投稿を引用する場合に用います。この書き方では、「箇所です」という言葉をどこから引用してきたのかわかりません。代わりに番号が振ってあれば、「何番については」と、説明する方も楽です。
>ファイル読み込みは、これでOKですか?
>10桁のvalueエリアに入る値はどのように判定されますか?
例えば返り値が"abc"のとき、後ろの7桁はどのように判定されますか?null値ですか?
valueエリアには"abc"だけ入るようにしたいです。試してみればわかると思うのですが、なぜ、質問するのでしょう?FUDA1さんが返答するまで、2時間半かかっています。それだけの時間があれば、何十回も試せると思うのですが?
>これらのステートメントは上位行に置くと下記のコンパイルエラーになります。
>画面スクリプトが定義されている前、先頭行に置くと下記のエラーがででまったく実行できません。ここからは、VB6.0 の言語仕様をご存知ではないように見受けられます。そうであれば、フォーラムで質問するのではなく、まずは書籍で勉強して下さい。「ウェブ ページなどを見て」でなく「書籍で」とするのは、書籍なら「金銭」という対価を明示的に払うので、「しなければ」という気になるからです。また、気がついたことを書き留めることもできます。何より、体系的に順番に説明されています。
なお、「上位行」「先頭行」という言葉が何を意味しているのか、わかりません。何に対して「上位」「先頭」なのでしょう?
Jitta@わんくま同盟