1

我希望将多个 Excel 文件中的工作表合并到一个具有刷新/更新功能的主文件中。

更具体地说,我在一个文件夹中有大约 25 个工作簿,它们的结构相同,并且因实体而异。每个文件都有一张纸,与文件名相同。每个实体每周都会使用最新的数值更新其特定文件。我想创建一个宏,它将:

  1. 从每个文件中复制一张工作表并将它们粘贴到一个“主”工作簿中。
  2. 具有允许我每周“刷新”这些复制/粘贴的标签的附加功能。

到目前为止我有这个代码:

Sub ConslidateWorkbooks()
'Code to pull sheets from multiple Excel files in one file directory
'into master "Consolidation" sheet.

Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet

Application.ScreenUpdating = False
FolderPath = "....."       'I have this filled in my code
Filename = Dir(FolderPath & "*.xls*")

Do While Filename <> ""
 Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
 For Each Sheet In ActiveWorkbook.Sheets
 Sheet.Copy After:=ThisWorkbook.Sheets(1)
 Next Sheet
 Workbooks(Filename).Close
 Filename = Dir()
Loop

Application.ScreenUpdating = True

End Sub

此代码可以很好地将多个工作簿中的数据提取到主工作簿中,但我需要添加某种刷新功能而不删除和重新复制选项卡(因为我在主工作表中的其他选项卡中有链接,这将变为 # REF 如果表被删除并重新复制)。

提前谢谢你的帮助。

4

1 回答 1

2

基本上你想刷新工作表的数据,如果它已经存在ThisWorkbook,否则复制/添加它。您可以使用此子例程来完成此操作:

Sub copyOrRefreshSheet(destWb As Workbook, sourceWs As Worksheet)
  Dim ws As Worksheet
  On Error Resume Next
  Set ws = destWb.Worksheets(sourceWs.Name)
  On Error GoTo 0
  If ws Is Nothing Then
    sourceWs.Copy After:=destWb.Worksheets(destWb.Worksheets.count)
  Else
    ws.Cells.ClearContents
    ws.Range(sourceWs.UsedRange.Address).value = sourceWs.UsedRange.Value2
  End If
End Sub

现在要使用它,请从您的例程代码中更改此行:

Sheet.Copy After:=ThisWorkbook.Sheets(1)

进入:

copyOrRefreshSheet ThisWorkbook, sheet
于 2017-07-05T17:23:03.550 回答