Excel VBA循环并从数组中获取值

我有以下代码来检索一个select,然后使其成为一个string数组。

Dim strArgument As Variant Dim irange As Range Dim ricosString As Variant Set irange = Selection ricosString = RangeToStringArray(irange) Dim vArray As Variant For i = LBound(ricosString) To UBound(ricosString) Set vArray = ricosString(i) 

我的问题在这里是ricosString(i) 。 抛出一个错误的下Subscript out of range. 任何想法为什么?

这里是RangeToStringArray的代码

 Public Function RangeToStringArray(theRange As Excel.Range) As String() Dim variantValues As Variant variantValues = theRange.Value Dim stringValues() As String ReDim stringValues(1 To UBound(variantValues, 1), 1 To UBound(variantValues, 2)) Dim columnCounter As Long, rowCounter As Long For rowCounter = UBound(variantValues, 1) To 1 Step -1 For columnCounter = UBound(variantValues, 2) To 1 Step -1 stringValues(rowCounter, columnCounter) = CStr(variantValues(rowCounter, columnCounter)) Next columnCounter Next rowCounter RangeToStringArray = stringValues 

结束function

RangeToStringArray是2维的,但是你将它作为1维引用Set vArray = ricosString(i)

另外Ricostring不是一个对象,所以你不应该使用Set

关于RangeToStringArray函数,我没有真正看到它的兴趣:为什么不使用ricosString = irange ,这会更简单,更快?

将你的ricosString定义为一个合适的String数组:

 Dim ricosString() As String 

将RangeToStringArray函数replace为适当的值:

 Public Function RangeToStringArray(theRange As Excel.Range) As String() Dim cell As Range Dim values() As String Dim i As Integer i = 0 ReDim values(theRange.Cells.Count) For Each cell In theRange values(i) = cell.Value i = i + 1 Next cell RangeToStringArray = values End Function 

然后你可以像这样引用数组中的值:

 vArray = ricosString(i) 'without Set