繁体   English   中英

将范围复制到另一个工作簿时下标超出范围

[英]Subscript out of range when copying range to another workbook

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

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

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

当宏从单独的工作簿运行时,这是成功的,但我一生都无法从文件本身中弄清楚如何做到这一点。

我已经三次检查了路径本身,我知道它们是正确的,因为正在创建新文件,我在代码中运行 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 as Workbook, then Set 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM