【发布时间】:2015-10-29 07:46:11
【问题描述】:
我正在尝试在 Excel 中的 VBA 中创建一个宏,以将一个工作表的内容复制到另一个工作表(最终将升级为将内容从一个工作簿复制到另一个工作簿,但需要先证明这个概念)但我一直遇到 Run -时间错误'9':“下标超出范围”。问题是,我看不到突出显示的行的哪一部分可能超出范围。
我正在使用一个名为“MetaTesting”的工作簿,它有 3 个工作表,下面的代码位从 A1 开始,并且只会向上递增。我以前能够参考这两个工作表以便能够跨单行进行复制,所以我知道问题不存在。这是调试器突出显示的第四行文本(以“Do While Trim(Application...”开头的行)。
注意:已编辑以考虑文件扩展名(如 cmets 中的建议)。同样的错误仍然被抛出,但现在它被抛出在第 11 行(在第一条评论下)
Private Sub CommandButton21_Click()
Dim i As Integer, j As Integer, k As Integer
i = 1
Do While Trim(Application.Workbooks("MetaTesting.xlsm").Worksheets(3).Cells(i, 1).Value) <> ""
j = 1
Do While Trim(Application.Workbooks("MetaTesting.xlsm").Worksheets(3).Cells(1, j).Value) <> ""
'Copy cell data from one sheet to the other
Application.Workbooks("MetaTesting.xlsm").Worksheets(1).Cells(i, j).Value = Application.Workbooks("MetaTesting.xlms").Worksheets(3).Cells(i, j).Value
j = j + 1
Loop
'Copy formatting of previous row and paste it on current row. Starts at row 3, copying formatting from row 2
If i > 2 Then
k = i - 1
Application.Workbooks("MetaTesting.xlsm").Worksheets(1).Cells(k, j).Copy
Application.Workbooks("MetaTesting.xlsm").Worksheets(1).Range(Cells(i, 1), Cells(i, j)).PasteSpecial Paste:=xlPasteFormats
End If
i = i + 1
Loop
End Sub
任何和所有帮助表示赞赏。
【问题讨论】:
-
你使用
Dim i As Long, j As Long, k As Long时是否也出现同样的错误? -
视情况使用
Workbooks("MetaTesting.xlsm")或Workbooks("MetaTesting.xlsb");?thisworkbook.Name在 VBE 的即时窗口 (Ctrl+G) 中报告的任何内容。 (顺便说一句,那些Application电话似乎都没有必要) -
@Jeeped 它不应该被声明为 Long 因为我正在测试的部分只有大约 10 x 10。但是,将 .xlsm 添加到工作簿名称的末尾确实将错误迁移到第 11 行(在第一条评论下)。但同样的错误。