我想复制工作簿中的一些数据(该工作簿将始终具有相同的名称:NEW LATEST Loanbook(,并将其复制到我正在使用的当前工作簿中。这是我现在的代码:
我在第3行有个错误:工作簿。打开我试图打开的文件是一个xlsm文件。
你知道我如何将它正确粘贴到我正在使用的其他工作簿的正确工作表中吗?
Set x = Workbooks.Open("G:Shared drivesReportingPower BI Source Files- DO NOT TOUCHLoanbookLATEST NEW Loanbook")
Workbooks.Open("G:Shared drivesReportingPower BI Source Files- DO NOT TOUCHLoanbookLATEST NEW Loanbook").Activate
x.Sheets("Payment Holidays").Range("A1:G55").Select
Selection.Copy
Set y = ThisWorkbook
ThisWorkbook.Activate
ThisWorkbook.Sheets("RAW Payment Holidays").Range("A1:G55").PasteSpecial Paste:=xlPasteValues
End Sub
代码的第一行:不要忘记提及文件结尾(例如.xlsm、.xls或.xlsx(。这可能是错误的原因之一
代码的第二行:一旦您将工作簿声明为x,就可以使用其名称引用它这不是导致错误的原因,而是增加了代码的可读性
x.Activate
3rd&代码的第4行:尽量避免使用select。你可以把它写在一条车道上这不是你出错的原因,但增加了代码的可靠性
x.Sheets("Payment Holidays").Range("A1:G55").Copy
代码的第5行。你希望y成为ThisWorkbook。由于您当前已激活工作表x,这也会将y设置为您的电子表格"新最新借出书",即使您很可能希望引用在宏开始时打开的工作簿。请考虑在打开其他工作簿之前写下这一行,以避免出现错误这很可能是你出错的原因
6th&代码的第7行。见第2行和第5行的评论。当你想调用你首先打开的表单(而不是最新的(,并且你已经声明它为";y";,你可以把它称为y.
y.Activate
y.Sheets("RAW Payment Holidays").Range("A1:G55").PasteSpecial Paste:=xlPasteValues
因此,您的总代码应该与下面的代码类似。请检查它是否有效。
Sub xxx()
Set y = ThisWorkbook
Set x = Workbooks.Open("G:Shared drivesReportingPower BI Source Files- DO NOT TOUCHLoanbookLATEST NEW Loanbook.xlsm")
x.Activate
x.Sheets("Payment Holidays").Range("A1:G55").Copy
y.Activate
y.Sheets("RAW Payment Holidays").Range("A1:G55").PasteSpecial Paste:=xlPasteValues
End Sub
首先,根据我的评论。打开Excel文件时,必须指定文件类型,即文件扩展名,在您的情况下为.xlsm
。
第二,当使用多个工作簿时,最好设置清晰的工作簿对象,这样可以很容易地区分它们。
第三,在您的操作中,您不需要使用复制和粘贴。传统上,在VBA中,使用.Copy
方法作为最后手段。在您的情况下,您可以简单地将范围设置为彼此。
请参阅以下代码。
Option Explicit
Sub Set_Range()
Dim wbNEW As Workbook
Dim wbCurrent As Workbook
Dim sFilePath As String, sFileName As String
sFilePath = "G:Shared drivesReportingPower BI Source Files- DO NOT TOUCHLoanbook"
'always include the file extension
sFileName = "LATEST NEW Loanbook.xlsm"
'two clear names
Set wbNEW = Workbooks.Open(sFilePath & sFileName)
Set wbCurrent = ThisWorkbook
'set values
wbCurrent.Sheets("RAW Payment Holidays").Range("A1:G55").Value = wbNEW.Sheets("Payment Holidays").Range("A1:G55").Value
End Sub
您应该添加文件扩展名,实际上不需要选择任何内容或激活任何工作簿或工作表。试试这个调整后的代码,看看它是否有效。
Set x = Workbooks.Open("G:Shared drivesReportingPower BI Source Files- DO NOT TOUCHLoanbookLATEST NEW Loanbook.xlsm")
Workbooks.Open ("G:Shared drivesReportingPower BI Source Files- DO NOT TOUCHLoanbookLATEST NEW Loanbook")
x.Sheets("Payment Holidays").Range("A1:G55").Copy
Set y = ThisWorkbook
If Not ThisWorkbook Is ActiveWorkbook Then ThisWorkbook.Activate
ThisWorkbook.Sheets("RAW Payment Holidays").Range("A1:G55").PasteSpecial Paste:=xlPasteValues