打开与活动工作簿相同的文件夹中的所有文件,除了活动工作簿

时间:2015-10-28 20:24:06

标签: excel vba excel-vba

我正在使用一个宏打开每个excel文件,该文件位于包含宏的工作簿(我将其称为主工作簿)所在的文件夹中,并复制第一个电子表格中的所有数据,然后粘贴它们进入新工作表的主工作簿。我在网上发现了一些非常有用的代码,我做了一些修改。一切似乎工作得很好,除了这个代码打开文件夹中的每个文件(在Do Until循环中),它打开了一半。

我希望能够避免这种情况,而无需直接引用主电子表格的名称,以防有人重命名。

是否有一个简单的命令,如果它试图打开自己,会跳过循环中的剩余代码?

代码如下:

Sub CombineWSs()
Dim wbDst As Workbook
Dim wbSrc As Workbook
Dim wsSrc As Worksheet
Dim MyPath As String
Dim strFilename As String

Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False

MyPath = ThisWorkbook.Path 
Set wbDst = ThisWorkbook
strFilename = Dir(MyPath & "\*.xls", vbNormal)

If Len(strFilename) = 0 Then Exit Sub

Do Until strFilename = ""

        Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename)
        Set wsSrc = wbSrc.Worksheets(1)

        'copy the data
        wbSrc.ActiveSheet.UsedRange.Select
        Selection.Copy

        'create a new worksheet in this master file
        wbDst.Sheets.Add After:=Sheets(Sheets.Count)

        'paste the data into master file's new sheet
        wbDst.Sheets(wbDst.Worksheets.Count).Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

        wbSrc.Close False

    strFilename = Dir()

Loop
wbDst.Worksheets(1).Delete

Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:2)

在我们的循环中放置一个If

Do Until strFilename = ""

   If strFilename <> wbDest.Name Then 'since you already set wbDest = ThisWorkbook

      '... rest of code

   End If

Loop