复制工作簿中的范围并将其粘贴到我的 current/open 工作簿中
Copy a range in a workbook and paste it in my current/open workbook
我想复制工作簿中的一些数据(其名称始终相同:NEW LATEST Loanbook)并将其复制到我正在使用的当前工作簿中。这是我现在的代码:
我在第 3 行出错:Workbooks.Open
我要打开的文件是 xlsm 文件。
你知道我如何才能正确地将它粘贴到我正在使用的其他工作簿中 sheet 吗?
Set x = Workbooks.Open("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST NEW Loanbook")
Workbooks.Open("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST 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
首先,接下我的评论。打开 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 drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\"
'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
第 1 行代码:不要忘记提及文件结尾(例如 .xlsm、.xls 或 .xlsx)。 这可能是导致错误的原因之一。
第 2 行代码:将工作簿声明为 x 后,您可以使用其名称来引用它。 这不是您出错的原因,而是增加了代码的可读性。
x.Activate
代码的第 3 和第 4 行:尽量避免使用 select。您可以改为将其写在一个通道中。 这不是您出错的原因,但会增加您代码的可靠性。
x.Sheets("Payment Holidays").Range("A1:G55").Copy
第 5 行代码。您希望 y 成为 ThisWorkbook。由于您当前已激活 sheet x ,这会将 y 也设置为您的价差sheet NEW LATEST Loanbook,即使您很可能想参考您在开始时打开的工作簿宏。考虑在打开其他工作簿之前编写此行以避免错误。 这很可能导致了您的错误。
第 6 和第 7 行代码。请参阅第 2 行和第 5 行的注释。由于您想调用第一个打开的 sheet(不是最新的)并且您已经将其声明为“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 drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST 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
您应该添加文件扩展名,您实际上不需要 select 任何东西或激活任何工作簿或工作表。试试这个调整后的代码,看看它是否有效。
Set x = Workbooks.Open("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST NEW Loanbook.xlsm")
Workbooks.Open ("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST 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
我想复制工作簿中的一些数据(其名称始终相同:NEW LATEST Loanbook)并将其复制到我正在使用的当前工作簿中。这是我现在的代码:
我在第 3 行出错:Workbooks.Open 我要打开的文件是 xlsm 文件。
你知道我如何才能正确地将它粘贴到我正在使用的其他工作簿中 sheet 吗?
Set x = Workbooks.Open("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST NEW Loanbook")
Workbooks.Open("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST 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
首先,接下我的评论。打开 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 drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\"
'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
第 1 行代码:不要忘记提及文件结尾(例如 .xlsm、.xls 或 .xlsx)。 这可能是导致错误的原因之一。
第 2 行代码:将工作簿声明为 x 后,您可以使用其名称来引用它。 这不是您出错的原因,而是增加了代码的可读性。
x.Activate
代码的第 3 和第 4 行:尽量避免使用 select。您可以改为将其写在一个通道中。 这不是您出错的原因,但会增加您代码的可靠性。
x.Sheets("Payment Holidays").Range("A1:G55").Copy
第 5 行代码。您希望 y 成为 ThisWorkbook。由于您当前已激活 sheet x ,这会将 y 也设置为您的价差sheet NEW LATEST Loanbook,即使您很可能想参考您在开始时打开的工作簿宏。考虑在打开其他工作簿之前编写此行以避免错误。 这很可能导致了您的错误。
第 6 和第 7 行代码。请参阅第 2 行和第 5 行的注释。由于您想调用第一个打开的 sheet(不是最新的)并且您已经将其声明为“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 drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST 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
您应该添加文件扩展名,您实际上不需要 select 任何东西或激活任何工作簿或工作表。试试这个调整后的代码,看看它是否有效。
Set x = Workbooks.Open("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST NEW Loanbook.xlsm")
Workbooks.Open ("G:\Shared drives\Reporting\Power BI Source Files- DO NOT TOUCH\Loanbook\LATEST 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