0

VBAでは、テキストファイルから読み取っています(xmlのようなタグがありますが、それでもtxtファイルです)。次のコードを実行しているときに、何か奇妙なことに遭遇しました。

Dim FileName, TextLine, strStore As String
....
TextLine = MyFile.ReadLine
If (TextLine Like "<Store>*") Then
    strStore = TextLine
    MsgBox (strString) 'for some reason this is outputting a blank msgbox
    MsgBox (TextLine) 'this is outputting the expected value
End If
....

コメントに記載されているように、最初のMsgBox出力は空白ですが、他の出力は期待されるデータを出力します。これはどのように可能ですか?スキップしたコードは、これらの変数のOOSです。変数がこのように割り当てられない原因は何ですか?
このノイズをキューに入れます:http ://www.youtube.com/watch?v = LehNm4VVqJI

4

2 に答える 2

3

MsgBox (strString)する必要がありますMsgBox (strStore)

于 2012-05-17T21:15:11.407 に答える
0

Option Explicit(Tonyが指摘するように)常に使用し、単一のDimステートメントで変数を宣言するように注意してください。

変数宣言を要求するオプションを常にtrueに設定します。(VBAエディター:[ツール]->[オプション]->[変数宣言が必要]をオンにします)これによりOption Explicit、すべての新しいモジュールにステートメントが自動的に追加されます。

変数にstrプレフィックスを使用しているため、2つのバリアントと1つの文字列を宣言するつもりだったと思います。strStoreとにかく、それぞれの型を明示的に設定せずに単一のdimステートメントで変数を宣言すると、バリアントが作成されることに注意してください。次のことを考慮してください。

Option Explicit

    Sub DeclaringVariables()
        Dim int1, int2, int3 As Integer

        ' int1 and int2 are variants, NOT integers!!!

        int1 = "my name"
        int2 = 4.23424
        int3 = 5

        MsgBox "int1: " & int1 & vbCrLf & "int2: " & int2 & vbCrLf & "int1: " & int3
    End Sub

intを整数として宣言するには、すべての変数に1つのdimステートメントを使用するか、個別のdimステートメントを使用するかにかかわらず、各変数のタイプを指定する必要があります。

次のことを試してみると、予想どおり、タイプの不一致が発生します。

Sub MoreVariables()
    Dim int1 As Integer, int2 As Integer, int3 As Integer

    int1 = "my name"
    int2 = 4.23424
    int3 = 5

    MsgBox "int1: " & int1 & vbCrLf & "int2: " & int2 & vbCrLf & "int1: " & int3

End Sub

最後に、キャメルケースまたはパスカルケースを使用して変数名を設定します。コードで変数を使用する場合は常に、すべて小文字で入力してください。次の行に移動すると、エディターは小文字の変数名を宣言で設定した名前に置き換えます。これは、名前を間違って入力していないことを確認するための便利な方法です。コードを実行するときにコンパイラが文句を言うのを待つのではなく、すぐに修正できます。

于 2012-05-18T13:05:01.687 に答える