根据文档,任何引用的文本名称都可以由变量定义如果我定义
Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names("MyRange").RefersToRange
它按预期工作如果我使用
Dim S as string
S="MyRange"
Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names(S).RefersToRange
它也运作良好
但使用
Dim Arr() as string
Arr(1)="MyRange"
Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names(Arr(1)).RefersToRange
给出错误信息
并且
Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names(Cstr(Arr(1))).RefersToRange
给出错误信息
为什么数组元素会导致错误以及如何解决这个问题?
我确实需要使用数组吗?
答案1
声明数组的大小 -Dim Arr(1) as String
我不太清楚你的具体应用是什么,但是数组需要指定大小才能使用-
Sub test()
'One number indicates one dimension and starts at **0** See footnote
Dim Arr(1) As String
Arr(1) = "MyRange2"
Range("A2").Name = Arr(1)
End Sub
如果你还不知道,那么你需要redim
它:
Sub test()
Dim Arr() As String
'Do stuff to get a number
ReDim Arr(1)
Arr(1) = "MyRange3"
Range("A3").Name = Arr(1)
End Sub
在您的示例中,我将其分解,但它的工作原理如下:
Sub test()
Dim Arr() As String
ReDim Arr(1)
Arr(1) = "MyRange"
Range("A1").Name = Arr(1)
Set xlsdatasource = ThisWorkbook.Names("MyRange").RefersToRange
MsgBox (xlsdatasource.Address)
End Sub
$A$1
在消息框中给我。
将“A1”替换为“A1:C1”,消息框会显示$A$1:$C$1
。
具有相同限制的更复杂示例
对于 A1:A6 阅读 -
this
is
a
one
dimensional
array
这也可以编译并运行:
Sub test()
Dim Arr() As String
Dim j As Integer
j = [counta(A1:A10)]
ReDim Arr(j - 1)
Dim i As Integer
For i = 0 To 5
Arr(i) = Cells(i + 1, 1)
Next
Dim rng As Range
For i = 0 To 5
Set rng = Range(Cells(i + 2, i + 5), Cells(i + 2, i + 8))
rng.Name = Arr(i)
Next
Set xlsdatasource = ThisWorkbook.Names(Arr(3)).RefersToRange
MsgBox (xlsdatasource.Address)
End Sub
并显示 msgbox $H$5:$K$5
。
改变这个:
Set xlsdatasource = ThisWorkbook.Names(Arr(3)).RefersToRange
MsgBox (xlsdatasource.Address)
更改为:
Set xlsdatasource = ThisWorkbook.Names("one").RefersToRange
MsgBox (xlsdatasource.Address)
还返回显示的消息框$H$5:$K$5
。
一张纸条
如果单元格A4
读1
作 而不是one
,则无法读取,Dim Arr() as String
因为“1”不是以信或者下划线。
我可以使用_1
或Dim Arr() as Variant
,但我实际上不能将范围命名为“1”,因为它是无效值命名。