2

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

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

谢谢!

周杰伦

4

1 回答 1

1

您可以考虑使用工作表的 CodeName,而不是使用 Sheets("Sheet 4")。如果您查看 Project Explorer 窗口,每个工作表都有一个 Name 和一个 CodeName。它可能看起来像这样

Sheet1 (Sheet1)
Sheet2 (Sheet2)

第一个是 CodeName(不能从 UI 更改)。括号中的一个是选项卡名称。在 Project Explorer 中选择工作表并按 F4 打开 Properties 对话框。转到 (Name) 属性(名称不佳的属性)并将其更改为有意义的内容。我更改了所有工作表的代码名称并使用 wsh 前缀。我作为日志的工作表的 CodeName 为

wshLog

现在我可以在我的代码中使用 wshLog 并获得一些好处。首先是如果有人在 UI 中重命名工作表,代码仍然有效。第二个是我可以输入 wshlog(全部小写),VBE 会将其更改为 wshLog,我会得到我拼写正确的视觉提示。最后,我的代码更具可读性,例如 wshFinalReport 与 Sheets("Sheet1")。

于 2012-04-17T22:24:08.447 回答