将工作表从不同的工作簿复制到此工作簿参考问题

Copy worksheet from different workbook to this workbook reference problems

我在同一文件夹中有两个 Excel 文件。宏在主工作簿 (wb_master) 上运行。它应该将 sheet 从数据工作簿 (wb_Data) 复制到 wb_master。 我的尝试是这样的:

Dim wb_name as String
Dim wb_master as Object
Dim ws_master as Object 
Dim wb_Data As Object
Dim MyPath as String
Dim DataFile as String

wb_name = ActiveWorkbook.Name    'other users could have renamed the wb, so I don't want to refer to the name with a fixed string
Set wb_master = Workbooks(wb_name)
Set ws_master = wb_master.Worksheets(1)

MyPath = ActiveWorkbook.Path
DataFile = Dir(MyFolder & "\Data_*.xlsx")

Set wb_Data = Workbooks.Open(FileName:=MyPath & "\" & DataFile)
wb_Data.Sheets(1).Copy After:=wb_master.Sheets(1)
wb_Data.Close SaveChanges:=False

问题在于,在复制 wb_Data.Sheets(1) 的行中,它没有使用 wb_master 工作簿,而是使用 wb_data 工作簿作为目标。我假设这是因为当调用 wb_master 时,它会重新评估 ActiveWorkbook,此时它是 wb_Data。 然而,即使我明白,为什么会这样,我也找不到解决问题的方法。

编辑:此宏在 personal.xslb

中运行

从关闭的工作簿中复制Sheet

  • 如果您 运行 来自 Personal.xslb 的代码,则将 ThisWorkbook 替换为 ActiveWorkbook 或适当的工作簿,例如Workbooks("Master.xlsm").
Option Explicit

Sub CopySheet()
    
    Dim dwb As Workbook: Set dwb = ThisWorkbook ' workbook containing this code
    Dim FolderPath As String: FolderPath = dwb.Path & "\"
    
    Dim swbName As String: swbName = Dir(FolderPath & "Data_*.xlsx")
    If Len(swbName) = 0 Then Exit Sub ' file not found
    
    Dim sFilePath As String: sFilePath = FolderPath & swbName
    
    Dim swb As Workbook: Set swb = Workbooks.Open(sFilePath)
    Dim ssh As Object: Set ssh = swb.Sheets(1)
    
    ssh.Copy After:=dwb.Sheets(1) ' second sheet
    'ssh.Copy Before:=dwb.Sheets(1) ' first sheet
    'ssh.Copy After:=dwb.Sheets(dwb.Sheets.Count) ' last sheet
    
    swb.Close SaveChanges:=False

    MsgBox "Sheet copied.", vbInformation

End Sub