将工作表从不同的工作簿复制到此工作簿参考问题
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
我在同一文件夹中有两个 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