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

问题描述 投票:0回答:1

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

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

我正在尝试扩展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)

'

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

excel vba copy range subscript
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.