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

时间:2019-11-01 14:33:39

标签: excel vba copy range subscript

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

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

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

当宏是从单独的工作簿中运行时,这是成功的,但是我一生都无法从文件本身中研究如何执行该宏。

我已经对路径本身进行了三重检查,我知道它们在创建新文件时是正确的,我已经在代码中运行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)

'

两个工作簿都打开了,所以我知道路径是正确的,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

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