【问题标题】:Copy a range in a workbook and paste it in my current/open workbook复制工作簿中的范围并将其粘贴到我当前/打开的工作簿中
【发布时间】:2020-07-06 19:22:34
【问题描述】:

我想复制工作簿中的一些数据(始终具有相同的名称: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

【问题讨论】:

  • 只需将.xlsm 扩展添加到您的.Open 方法中

标签: excel vba copy copy-paste


【解决方案1】:

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

第 2 行代码:将工作簿声明为 x 后,您可以使用其名称来引用它。 这不是您出错的原因,但会增加代码的可读性。

x.Activate

3rd & 4th 代码行:尽量避免使用 select。您可以改为将其写在一个通道中。 这不是您出错的原因,而是增加了代码的可靠性。

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

第 5 行代码。您希望 y 成为 ThisWorkbook。由于您当前已激活工作表 x ,因此这也会将 y 设置为您的电子表格 NEW LATEST Loanbook,即使您很可能希望参考在宏开头打开的工作簿。考虑在打开其他工作簿之前编写此行以避免错误。 这很可能导致您的错误。

第 6 和第 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 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】:

    首先,继续我的评论。打开 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
    

    【讨论】:

    • 谢谢,它看起来很棒,但我仍然有来自 mt 文件路径的错误,就像它无法识别文件名一样。我查了一下,这是确切的命名法。你有没有遇到过这种基于文件名的问题?
    • 您确定文件路径正确吗?您始终可以直接从窗口顶部的 Windows 资源管理器导航框中复制路径。这就是我在处理这些时通常会做的事情。我这么说是因为我看到- 有不平衡的空间..
    【解决方案3】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多