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前缀。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 声明为整数,您必须为每个变量指定类型,无论您对所有变量使用一个 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

最后一件事:使用 Camel 或 Pascal 大小写设置变量名。每当您在代码中使用变量时,请以全部小写形式键入它们。当您移至下一行时,编辑器会将您的小写变量名称替换为您在声明中设置的名称。这是确保您没有输入错误名称的便捷方法,因此您可以立即修复它,而不是在运行代码时等待编译器抱怨。

于 2012-05-18T13:05:01.687 回答