为什么最后一行出现类型不匹配错误?
Dim LineArray()
Dim Line
Dim FilePath as String
FilePath = "X:PathToFile.txt"
Open FilePath For Input As #1
Line Input #1, Line
Close #1
LineArray = Split(Line, vbTab)
LineArray是一个Variant/Variant((
行是变体/字符串
如果我把它们都调暗为变体,我仍然会得到错误
正如注释中所写:Split
返回一个字符串数组。
所以正确的语法是
Dim LineArray() As String
LineArray = Split(Line, vbTab)
VBA编译器知道LineArray
将是字符串数组。然而,由于它被声明为动态数组,在为其分配成员之前,它不是一个数组。通常,这是使用ReDim
-语句来完成的,该语句为特定类型的特定数量的变量保留必要的空间。当使用split函数时,这个ReDim(或类似的东西(是在函数内部完成的。
现在Variant
是一种非常特殊的数据类型,它可以容纳任何类型的数据。这可以是Integer、String、Date、Object(引用(、Error或值Empty
(这意味着还没有赋值(。而且,它甚至可以是任何数据类型的数组。您可以使用函数VarType((获得有关它包含哪些数据的信息。
您不能做的是将结果分配给一个静态数组:
Dim LineArray(0 to 3) As String
LineArray = Split(Line, vbTab)
这将引发编译错误:无法分配给数组。不仅定义了变量,而且已经保留了内存(在本例中为4个字符串(。
您也不能将结果分配给Variant数组。为什么?因为Split
创建了一个字符串数组。现在,如果您将其分配给Variant的数组,那么可以将Double分配给第一个元素。然而,Split保留了内存来保存String,所以内存会发生可怕的事情。
Dim LineArray(0) As Variant
LineArray = Split(Line, vbTab)
LineArray(0) = 3.1415926 ' Ouch!
需要的是
- 为n个变量保留内存,并将其分配给
LineArray
(n=Split返回的字符串数( - 循环遍历字符串数组的所有元素,并将这些字符串逐个分配给变量数组。现在,虽然这是可能的,但没有任何实例会为您做到这一点。Split函数创建并返回String数组。赋值运算符("="(能够将任何值赋给Variant,但不能保留数组并逐个复制元素