Excel 将范围复制到其他工作簿时下标超出范围

Excel 将范围复制到其他工作簿时下标超出范围,excel,vba,copy,range,subscript,Excel,Vba,Copy,Range,Subscript,我正在编写一个报告系统,其中用户填写一个表单,表单按钮运行一个宏,以使用基于多个字段(包括时间戳)的名称保存文件 所有数据也在第二张图纸上,但在一行中,以便复制到主图纸 我正在尝试扩展保存宏以将此行复制到第二个工作簿的最后一行 当宏从一个单独的工作簿运行时,这是成功的,但在我的一生中,我无法从文件本身解决如何执行它 我已经三次检查了路径本身,我知道它们在创建新文件时是正确的,我在代码中运行了msgbox来检查文件名和变量是否相同 timestampedfile = Worksheets("sin

我正在编写一个报告系统,其中用户填写一个表单,表单按钮运行一个宏,以使用基于多个字段(包括时间戳)的名称保存文件

所有数据也在第二张图纸上,但在一行中,以便复制到主图纸

我正在尝试扩展保存宏以将此行复制到第二个工作簿的最后一行

当宏从一个单独的工作簿运行时,这是成功的,但在我的一生中,我无法从文件本身解决如何执行它

我已经三次检查了路径本身,我知道它们在创建新文件时是正确的,我在代码中运行了msgbox来检查文件名和变量是否相同

timestampedfile = Worksheets("single_line").Range("b3")
totalpath = Path & timestampedfile & ".xlsm"

ActiveWorkbook.SaveCopyAs filename:=totalpath
master_wb = "s:\blah\blah\blah.xlsx"  
master_sht = "Master_Database"
contact_wb = totalpath
contact_sht = "single_line"

Workbooks.Open (master_wb)
Workbooks.Open (contact_wb)

MsgBox (totalpath)

Workbooks(contact_wb).Worksheets(contact_sht).Range("A3:AQ3").Copy Worksheets(master_wb).Sheets(master_sht).Range("A" & Rows.Count).End(xlUp)(2)
"

两个工作簿都打开了,因此我知道路径是正确的,有人能帮忙吗?

解决方案由OP提供

由于BigBen对工作簿变量的评论,问题得以解决:


使用工作簿变量,而不是按名称引用工作簿:
Dim masterWb作为工作簿,然后设置masterWb=Workbooks.Open(“s:\blah\blah\blah.xlsx”)
。联系人工作簿也是如此。您也可以考虑使用工作表变量,而不是使用表名。

代码更改为:

Dim master_wb As Workbook
Dim contact_wb As Workbook
Dim master_sht As Worksheet
Dim contact_sht As Worksheet

Path = "S:\blah\" & Worksheets("report").Range("c8") & "\"
filename = Worksheets("back_end_formulas").Range("e10")
timestampedfile = Worksheets("single_line").Range("b3")
totalpath = Path & timestampedfile & ".xlsm"

ActiveWorkbook.SaveCopyAs filename:=totalpath
SetAttr totalpath, vbReadOnly

Set master_wb = Workbooks.Open("S:\blah\Master_Database2.xlsx")
Set master_sht = master_wb.Sheets("Master_Database")
Set contact_wb = Workbooks.Open(totalpath)
Set contact_sht = contact_wb.Sheets("single_line")

ThisWorkbook.Activate

contact_sht.Range("A3:AQ3").Copy master_sht.Range("A" & Rows.Count).End(xlUp)(2)

master_wb.Close SaveChanges:=True
contact_wb.Close SaveChanges:=False
ActiveWorkbook.Close SaveChanges:=False

如果出现该错误,则表示工作表或工作簿的拼写错误。请使用工作簿变量,而不是按名称引用工作簿:
Dim masterWb as workbook
,然后
Set masterWb=Workbooks.Open(“s:\blah\blah\blah.xlsx”)
。联系人工作簿也是如此。您可能也会考虑使用工作表变量,而不是使用表名。要测试这样的事情,请添加“s=MistWB.Name”这样的行,其中S使用“DimeS作为字符串”更早定义。然后,您可以在执行该行后将鼠标悬停在变量上,以查看它是否符合预期。简单的调试,但它解决了很多问题。很好,你编辑了你的帖子,并赞扬了@BigBen。然而,给某人评分的正确方法是使用旁边的复选框/向上箭头标记他们的评论/答案。这样他们就得到认可,在论坛上有更多的积分/特权。它没有出现,我想我必须有15次旅行才能做到这一点。我再看看。