在宏

2014-01-19 28 views
-1

下标超出范围下面是我的代码:在宏

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 
+0

使用第一行假定应打开工作簿“A”并包含名为“Sheet1”的工作表。这是真的吗? –

+0

我有一个名为A和Sheet1的Excel。我不知道Excel是否打开。以上是我使用的代码 – user3212324

回答

0

而不是语法,如:

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

使用类似:

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

谢谢您的回复。有效。我还有一个疑问,所有使用的Excel表格应该是xlsm格式? – user3212324

+0

包含宏**的工作簿**应为**。xlsm **或**。xls **格式。 –

+0

我想在一个工作簿中复制两个工作簿值。现在得到最后一行的错误。 。 – user3212324

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 
+0

谢谢Ramesh.Can你可以帮我解决我发布的另一个错误 – user3212324

0

回答你的第二个问题。

尝试更换:

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

有:

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

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

另一个原因是可以会导致在这种情况下,麻烦的是,如果你没有在你的Workbooks("C.xlsm").Worksheets("Sheet1")选择一个有效的区域,当您尝试复制到它做的。在粘贴之前尝试添加Cells(1,1).Select

我将与一个更好的选择结束,不需要激活的工作簿/工作表:

.Copy该方法具有可以设定为任何打开的工作簿的任何现有的片内的“目的地”参数。例如,您可以用类似方法替换最后4行:

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