Vba 打开与活动工作簿位于同一文件夹中的所有文件(活动工作簿除外)

Vba 打开与活动工作簿位于同一文件夹中的所有文件(活动工作簿除外),vba,excel,Vba,Excel,我使用一个宏打开包含宏的工作簿(我称之为主工作簿)所在文件夹中的每个excel文件,并复制第一个电子表格中的所有数据,然后将它们粘贴到新工作表上的主工作簿中。我在网上找到了一些非常有用的代码,对它们做了一些修改。一切似乎都很正常,除了当这段代码打开文件夹中的每个文件(在Do-till循环中)时,它会自动打开一半 我希望能够避免这种情况,而不直接引用主数据表的名称,以防有人重命名它 是否有一个简单的命令,如果它试图打开自己,将跳过循环中的剩余代码 代码如下: Sub CombineWSs() Di

我使用一个宏打开包含宏的工作簿(我称之为主工作簿)所在文件夹中的每个excel文件,并复制第一个电子表格中的所有数据,然后将它们粘贴到新工作表上的主工作簿中。我在网上找到了一些非常有用的代码,对它们做了一些修改。一切似乎都很正常,除了当这段代码打开文件夹中的每个文件(在Do-till循环中)时,它会自动打开一半

我希望能够避免这种情况,而不直接引用主数据表的名称,以防有人重命名它

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

代码如下:

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

If
块放入循环中

Do Until strFilename = ""

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

      '... rest of code

   End If

Loop
Do直到strFilename=“”
如果strFilename wbDest.Name,那么“因为您已经设置了wbDest=ThisWorkbook
'... 代码的其余部分
如果结束
环

如果直接引用名称,您知道怎么做吗?您不需要知道工作簿的名称。如果strFilename=activeworkbook.name,我会添加一些类似
If-strFilename=activeworkbook.name然后
的内容,然后继续你的
Do-While
循环,并将
End-If
放在
循环之后。你能将
While
混合到
循环中吗?他能做一些像“代码”这样的事情直到strFilename=“”,而strFilename这个工作簿。Name
?这是不可能的,@BruceWayne