Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 宏中的下标超出范围_Excel_Vba - Fatal编程技术网

Excel 宏中的下标超出范围

Excel 宏中的下标超出范围,excel,vba,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("

这是我的密码:

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

而不是像这样的语法:

Workbooks("A").Worksheets("Sheet1").Activate
使用类似于:

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

请先尝试设置工作簿和工作表的引用:

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

回答你的第二个问题

尝试替换:

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

Workbooks("C.xlsm").Activate
Worksheets("Sheet1").Activate
这背后的原因是:当您在一行中调用它时,您只想激活该工作簿中的工作表;而不是同时激活工作簿和工作表

在这种情况下,另一个可能导致问题的原因是,如果您在
工作簿(“C.xlsm”).工作表(“Sheet1”)
中尝试复制时没有选择有效的区域。尝试添加
单元格(1,1)。粘贴前选择

我将以一个不需要激活工作簿/工作表的更好的替代方案结束:

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

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

第一行的使用假设工作簿“A”应该打开,并且包含名为“Sheet1”的工作表。这对你来说是真的吗?我有一个名为A和Sheet1的Excel。我不知道那个Excel是否打开了。以上是我使用的代码谢谢你的回复。成功了。我还有一个疑问,所有使用的Excel工作表都应该是xlsm格式?包含宏的工作簿应该是.xlsm或.xls格式。我正在尝试在一个工作簿中复制两个工作簿值。现在获取最后一行的错误。工作簿(“A.xlsm”)。激活工作表(“Sheet1”)。选择范围(“B2:BG2”)。选择范围(Selection,Selection.End(xlDown))。选择选择。复制工作簿(“C.xlsm”)。工作表(“Sheet1”)。激活活动表。粘贴活动窗口。小滚动:45 lMaxRows=单元格(Rows.Count,“B”)。结束(xlUp).行范围(“B”和lMaxRows+1).选择工作簿(“AB.xlsm”).激活工作表(“Sheet1”).选择范围(“B2:BG2”).选择范围(Selection,Selection.End(xlDown)).选择Selection.copy工作簿(“C.xlsm”).工作表(“Sheet1”).Activate ActiveSheet.paste谢谢你Ramesh。你能帮我解决我发布的另一个错误吗