下标超出范围,即使已定义值

时间:2012-04-17 17:30:19

标签: vba excel-vba excel

我正在编写一段代码,将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

关于如何解决此问题的任何想法?

谢谢!

1 个答案:

答案 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”)。