在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
答案 0 :(得分:3)
MsgBox (strString)
应为MsgBox (strStore)
答案 1 :(得分:0)
始终使用Option Explicit
(正如Tony指出的那样),并小心在单个Dim语句中声明变量。
始终将要求变量声明的选项设置为true。 (VBA编辑器:工具 - &gt;选项 - &gt;检查“需要变量声明”)这将在所有新模块中自动添加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
要将整数声明为整数,必须为每个变量指定类型,无论是对所有变量使用一个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案例设置变量名称。每当您在代码中使用变量时,以小写字母键入它们。当您移动到下一行时,编辑器将使用您在声明中设置的名称替换小写变量名称。这是一种方便的方法,可以确保您没有输入错误的名称,这样您就可以立即修复它,而不是等待编译器在运行代码时抱怨。