2016-11-20 96 views
1

我对此有疑问。我有一个宏,让我选择我想要的文件夹,然后我有一个循环,它打开所有的Excel文件 我想排除这个工作簿(包含宏),所以我的想法是从名称中排除或来自类型(xlsm)。 任何想法的方法来解决它?我想用<>一个条件,但我真的不知道在哪里以及如何放置它。从打开所有文件夹的循环中排除此工作簿

下面的代码 感谢您的帮助

Sub macro3() 
    Dim fso As Object, Dossier As Object, NomDossier, feuille As Worksheet 
    Dim pvtTable As Object 



    Dim Files As Object, File As Object, i As Integer 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    NomDossier = ChoisirDossier 
    If NomDossier = "" Then Exit Sub 
    Set Dossier = fso.getfolder(NomDossier) 
    Set Files = Dossier.Files 

     If Files.Count <> 0 Then 
      For Each File In Files 
       Workbooks.Open Filename:=File 


      For Each feuille In Worksheets 
       If feuille.Name Like ("*TCD RETARD*") Then 

      feuille.Activate 
      Range("D14").Select 


     ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _ 
    Sheets(2).ListObjects(1) 

    ActiveWorkbook.RefreshAll 
    ActiveWorkbook.Save 
    ActiveWorkbook.Close 



End If 
Next 
Next 
End If 


End Sub 
Function ChoisirDossier() 
Dim objShell, objFolder, chemin, SecuriteSlash 
Set objShell = CreateObject("Shell.Application") 
Set objFolder = _ 
objShell.BrowseForFolder(&H0&, "Choisisser un répertoire", &H1&) 
On Error Resume Next 
chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "" 
If objFolder.Title = "Bureau" Then 
chemin = "C:WindowsBureau" 
End If 
If objFolder.Title = "" Then 
chemin = "" 
End If 
SecuriteSlash = InStr(objFolder.Title, ":") 
If SecuriteSlash > 0 Then 
chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & "" 
End If 
ChoisirDossier = chemin 
End Function 
+0

你需要把'IF'声明后'如果Files.Count < > 0然后'。类似于'If File <>“C:/../../ filename.xslm”Then“和代码后面的”End If“。按照它在这篇文章中出现的方式,缩进就不会让你感到惊讶,因为你无法确定'End if'应该放在哪里。我认为只是坚持在'End Sub'之前,你会好的 – CallumDA

+0

感谢您的回答:)我会努力的 – jmten

回答

0

由于我的意见被证明更像是一个答案 - 我已经在这里添加它。你应该能够粘贴它并去。我也被Next控件添加一些缩进,并添加变量名 - 我认为它更易于阅读这样

Sub macro3() 
    Dim fso As Object, Dossier As Object, NomDossier, feuille As Worksheet 
    Dim pvtTable As Object 



    Dim Files As Object, File As Object, i As Integer 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    NomDossier = ChoisirDossier 
    If NomDossier = "" Then Exit Sub 

    Set Dossier = fso.getfolder(NomDossier) 
    Set Files = Dossier.Files 

    If Files.Count <> 0 Then 
     For Each File In Files 
      If File <> ThisWorkbook.FullName Then 
       Workbooks.Open Filename:=File 

       For Each feuille In Worksheets 
        If feuille.Name Like ("*TCD RETARD*") Then 

        feuille.Activate 
        Range("D14").Select 

        ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:=Sheets(2).ListObjects(1) 

        ActiveWorkbook.RefreshAll 
        ActiveWorkbook.Save 
        ActiveWorkbook.Close 

        End If 
       Next feuille 
      End If 
     Next File 
    End If 
End Sub 

Function ChoisirDossier() 
    Dim objShell, objFolder, chemin, SecuriteSlash 
    Set objShell = CreateObject("Shell.Application") 
    Set objFolder = _ 
    objShell.BrowseForFolder(&H0&, "Choisisser un répertoire", &H1&) 
    On Error Resume Next 
    chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "" 
    If objFolder.Title = "Bureau" Then 
     chemin = "C:WindowsBureau" 
    End If 
    If objFolder.Title = "" Then 
     chemin = "" 
    End If 
    SecuriteSlash = InStr(objFolder.Title, ":") 
    If SecuriteSlash > 0 Then 
     chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & "" 
    End If 
    ChoisirDossier = chemin 
End Function 
+0

代码看起来好像这样;)但它不工作,我认为它,因为如果你添加lign,也许它需要在if files.count之后。? – jmten

+0

好,如果这解决了你的问题,请接受并通过点击此答复的勾号关闭问题 – CallumDA

+0

代码看起来好像这样;)但它不工作,我认为它的原因是如果你添加的Lign,可能它需要刚好在if files.count ..之后?我的意思是这行如果File <> ThisWorkbook.FullName然后 – jmten