在工作簿中复制范围并将其粘贴到我当前/打开的工作簿中

时间:2020-07-06 10:17:09

标签: excel vba copy copy-paste

我想在工作簿中复制一些数据(它将始终具有相同的名称:NEW LATEST Loanbook),然后将其复制到我正在使用的当前工作簿中。这是我现在拥有的代码:

我在第3行出现错误:Workbooks.Open 我要打开的文件是xlsm文件。

您是否知道如何将其正确粘贴到我在正确的工作表中使用的其他工作簿上?


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

3 个答案:

答案 0 :(得分:0)

首先,从我的评论开始。打开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 :(得分:0)

代码的

第一行行:不要忘记提及结尾的文件(例如.xlsm,.xls或.xlsx)。 这可能是导致错误的原因之一。

代码的

第2 行:将工作簿声明为x后,可以使用其名称进行引用。 这不是发生错误的原因,但是可以提高代码的可读性。

x.Activate
代码的

第三和第四行:尽量避免使用select。您可以改写在一个通道中。 这不是发生错误的原因,但是可以提高代码的可靠性。

x.Sheets("Payment Holidays").Range("A1:G55").Copy
代码的

第5 行。您希望y成为ThisWorkbook。由于您当前已激活工作表x,即使您很可能希望引用在宏开始处打开的工作簿,这也将对电子表格NEW LATEST Loanbook设置y。考虑打开另一工作簿之前写此行,以避免出现错误。 这很可能导致了您的错误。

代码的

第6和第7 行。参见第二和第五行的注释。要调用首先打开的工作表(而不是最新的工作表),并且已经将其声明为“ 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

答案 2 :(得分:0)

您应该添加文件扩展名,并且您实际上不需要选择任何内容或激活任何工作簿或工作表。试试这个经过调整的代码,看看它是否有效。

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