我正在编写一段代码,将Excel工作表上的选定数据传输到一个数组中,然后用于在新电子表格上打印数据。但是,我收到“下标超出范围”错误,即使我滚动selectArr(i - 1)时出现一个值。这是我的代码:
Sub Marascuilo()
Dim numRows As Integer 'Number of rows selected
numRows = Selection.Rows.Count
Dim selectArr() As Double 'Array containing numbers from selected cells
selectArr = loadArr(numRows) 'Load values into array
For i = 2 To UBound(selectArr) - LBound(selectArr) + 2
Sheets("Sheet 4").Cells(i, 2).Value = selectArr(i - 1)
Next
End Sub
'This function loads the values from the selected cells into selectArr.
Function loadArr(numRows) As Double()
Dim ResultArray() As Double
r = 1
For Each v In Selection
ReDim Preserve ResultArray(1 To r)
If v <> "" Then
ResultArray(r) = v.Value
r = r + 1
End If
Next
loadArr = ResultArray
End Function
关于如何解决此问题的任何想法?
谢谢!
杰
答案 0 :(得分:1)
您可以考虑使用工作表的CodeName,而不是使用表格(“工作表4”)。如果查看Project Explorer窗口,每个工作表都有一个Name和一个CodeName。它可能看起来像这样
Sheet1 (Sheet1)
Sheet2 (Sheet2)
第一个是CodeName(无法从UI更改)。 parens中的一个是选项卡名称。在Project Explorer中选择工作表,然后按F4打开“属性”对话框。转到(Name)属性(命名不佳的属性)并将其更改为有意义的内容。我更改了所有工作表的CodeNames并使用了wsh前缀。我的工作表是日志的CodeName为
wshLog
现在我可以在我的代码中使用wshLog,并获得一些好处。首先,如果有人在UI中重命名工作表,代码仍然有效。第二个是我可以键入wshlog(全部小写),VBE会将其更改为wshLog,我得到的是我拼写正确的视觉提示。最后,我的代码更具可读性,例如wshFinalReport与Sheets(“Sheet1”)。