2016-11-20 32 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

相關問題