Excel VBA:将工作表的简单副本放在文件夹中的多个工作簿上

我试图应用一个macros,从一个workBOOK(“x1”)复制并粘贴一个特定的工作表(称为工作表“x”的标题)到一个主工作簿(调用workBOOK“xmaster”),之后它从工作簿x1复制和粘贴工作表,还应该将工作表“x”的标题重命名为单元格B3。 这应该在移到下一个工作簿之前完成。

这将需要通过x100等工作簿x1。 我不能通过名称来引用工作簿,因为它们都被命名为一个没有真正可sorting方法的文本string。

我知道的这个代码是可行的,将“x”从“x1”复制到“xmaster”,以及重命名该表并打破链接,如下所示:

Sub CombineCapExFiles() Sheets("Capital-Projects over 3K").Move After:=Workbooks("CapEx Master File.xlsm").Sheets _ (3) ActiveSheet.Name = Range("B3").Value Application.DisplayAlerts = False For Each wb In Application.Workbooks Select Case wb.Name Case ThisWorkbook.Name, "CapEx Master File.xlsm" ' do nothing Case Else wb.Close End Select Next wb Application.DisplayAlerts = True End Sub 

激活上一个窗口不工作,也不知道如何解决这一部分。

但是我不知道如何构build这个循环来遍历目录中的所有工作簿。

我应该使用这个:?

 MyPath = "C:\directory here" strFilename = Dir(MyPath & "\*.xlsx", vbNormal) 'change to xlsm if needed ? If Len(strFilename) = 0 Then Exit Sub ' exit if no files in folder Do Until strFilename = "" 'Your code here strFilename = Dir() Loop 

另一个限制是它不需要在xmaster上运行macros(它会产生一个错误,因为它没有工作表中的x)。

谢谢! 马修

喜欢这个? (未testing)

 Option Explicit Sub LoopFiles() Dim strDir As String, strFileName As String Dim wbCopyBook As Workbook Dim wbNewBook As Workbook Dim wbname as String strDir = "C:\" strFileName = Dir(strDir & "*.xlsx") Set wbNewBook = Workbooks.Add 'instead of adding a workbook, set = to the name of your master workbook wbname = ThisWorkbook.FullName Do While strFileName <> "" Set wbCopyBook = Workbooks.Open(strDir & strFileName) If wbCopyBook.FullName <> wbname Then wbCopyBook.Sheets(1).Copy Before:=wbNewBook.Sheets(1) wbCopyBook.Close False strFileName = Dir() Else strFileName = Dir() End If Loop End Sub 

这一点将会避免在xmaster上运行macros。

 xmaster = "filename for xmaster" MyPath = "C:\directory here" strFilename = Dir(MyPath & "\*.xls*", vbNormal) 'this will get .xls, .xlsx, .xlsm and .xlsb files If Len(strFilename) = 0 Then Exit Sub ' exit if no files in folder Do Until strFilename = "" If strFileName = xmaster Then ' skip the xmaster file strFilename = Dir() End If 'Your code here strFilename = Dir() Loop 

但是我不能帮助其他部分。 在代码中看不到任何“激活以前的窗口”部分。