下标超出范围

时间:2014-01-19 14:32:48

标签: excel vba

这是我的代码:

Workbooks("A").Worksheets("Sheet1").Activate
Range("B2:BG2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.copy
Workbooks("C.xlsm").Worksheets("Sheet1").Activate
ActiveSheet.Paste

我在第一行收到了下标超出范围的错误。

现在错误在最后一行:

Workbooks("A.xlsm").Activate
Worksheets("Sheet1").Select
Range("B2:BG2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.copy
Workbooks("C.xlsm").Worksheets("Sheet1").Activate
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=45
lMaxRows = Cells(Rows.Count, "B").End(xlUp).Row
Range("B" & lMaxRows + 1).Select
Workbooks("AB.xlsm").Activate
Worksheets("Sheet1").Select
Range("B2:BG2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.copy
Workbooks("C.xlsm").Worksheets("Sheet1").Activate
ActiveSheet.Paste

3 个答案:

答案 0 :(得分:0)

而不是语法:

Workbooks("A").Worksheets("Sheet1").Activate

使用类似的东西:

Workbooks("A.xlsm").Activate
Worksheets("Sheet1").Select

答案 1 :(得分:0)

首先尝试设置工作簿和工作表的参考:

Dim wb1 As Workbook
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet

Set wb1 = Workbooks("Book1")
Set ws1 = wb1.Sheets(1)

Windows(2).Activate
Set wb2 = ActiveWorkbook
Set ws2 = wb2.Sheets(1)

ws1.Activate
ws1.Range("B2:BG2").Select
Selection.Copy

wb2.Activate
ws2.Activate
ActiveSheet.Paste

答案 2 :(得分:0)

回答你的第二个问题。

尝试更换:

Workbooks("C.xlsm").Worksheets("Sheet1").Activate

with:

Workbooks("C.xlsm").Activate
Worksheets("Sheet1").Activate

背后的原因是:当你在一行中调用它时,你只想激活该工作簿中的工作表;而不是激活工作簿和工作表。

在这种情况下可能造成问题的另一个原因是,当您尝试复制时,Workbooks("C.xlsm").Worksheets("Sheet1")中没有选择有效区域。在粘贴之前尝试添加Cells(1,1).Select

我将以更好的替代品结束,不需要激活工作簿/工作表:

.Copy方法有一个“destination”参数,可以设置为在任何打开的工作簿的任何现有工作表中。例如,您可以使用以下内容替换最后4行:

Range(Selection, Selection.End(xlDown)).Copy _
                              (Workbooks("C.xlsm").Worksheets("Sheet1").Range("A1"))