2017-12-19 4 views
0

Ich habe einen Code, mit dem ich mehrere Dateien in einer Excel-Arbeitsmappe öffnen kann, anstatt die Datendateien manuell auswählen zu müssen Ich möchte in der Lage sein, meinen Code so zu loopen, dass er alle meine Dateien durchläuft und nach Datendateien namens p00001, p00002, p00003 usw. sucht. Weiß jemand, wie ich meinen Code bearbeiten kann, um alle so genannten Dateien auszuwählen?Vba-Code, um nach belastenden Datendateien zu suchen und sie in separaten Blättern der gleichen Arbeitsmappe zu öffnen

Mein Code ist:

Sub ImportFiles() 
    Dim sheet As Worksheet 
    Dim total As Integer 
    Dim intChoice As Integer 
    Dim strPath As String 
    Dim i As Integer 
    Dim wbNew As Workbook 
    Dim wbSource As Workbook 
    Set wbNew = Workbooks.Add 


    'allow the user to select multiple files 
    Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = True 
    'make the file dialog visible to the user 
    intChoice = Application.FileDialog(msoFileDialogOpen).Show 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    'determine what choice the user made 
    If intChoice <> 0 Then 
     'get the file path selected by the user 
     For i = 1 To Application.FileDialog(msoFileDialogOpen).SelectedItems.Count 
      strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(i) 

      Set wbSource = Workbooks.Open(strPath) 

      For Each sheet In wbSource.Worksheets 
       total = wbNew.Worksheets.Count 
       wbSource.Worksheets(sheet.Name).Copy _ 
       after:=wbNew.Worksheets(total) 
      Next sheet 

      wbSource.Close 
     Next i 
    End If 

End Sub 
+0

Sind diese Dateien * irgendwo * auf Ihrem Computer? Oder haben Sie einen Ordner (vielleicht mit Unterordnern), der alle Dateien enthält, die Sie öffnen/verwenden möchten? – BruceWayne

+0

Sie sind alle in verschiedenen Unterordnern in einem größeren Ordner enthalten. –

+0

Suchen Sie, wie Sie Dateien in Unterordnern durchlaufen, und dann können Sie eine 'If' Anweisung mit dem Dateinamen, zum Beispiel 'If Instr (1, myFile.Name , "P00") Dann ... '. – BruceWayne

Antwort

0

Sie benötigen einen Ordner tun nach unten bohren. Sie können ein Beispiel unten sehen. Alles, was Sie tun müssen, ist dies zu tun, wenn Statement If InStr(File, ".dat") And InStr(File, "\p0") Then, so dass nur die Dateien geöffnet werden, die Sie haben möchten.

Public sheet As Worksheet 
    Public total As Integer 
    Public intChoice As Integer 
    Public strPath As String 
    Public i As Integer 
    Public wbNew As Workbook 
    Public wbSource As Workbook 


Sub main() 
Set wbNew = Workbooks.Add 
     Dim FileSystem As Object 
     Dim HostFolder As String 

     HostFolder = "D:\test" 

     Set FileSystem = CreateObject("Scripting.FileSystemObject") 
     DoFolder FileSystem.GetFolder(HostFolder) 
    End Sub 

Sub DoFolder(Folder) 
    Dim SubFolder 
    For Each SubFolder In Folder.SubFolders 
     DoFolder SubFolder 
    Next 
    Dim File 
    For Each File In Folder.Files 
     If InStr(File, ".dat") And InStr(File, "\p0") Then 

      strPath = File 
      Set wbSource = Workbooks.Open(strPath) 
      For Each sheet In wbSource.Worksheets 
       total = wbNew.Worksheets.Count 
       wbSource.Worksheets(sheet.Name).Copy _ 
       after:=wbNew.Worksheets(total) 
      Next sheet 
      wbSource.Close 
     End If 
    Next 
End Sub 
+0

danke, aber der Code findet immer einen Fehler in der strPath-Zeile des Codes einen bestimmten Grund warum? –

+0

@ J.Smith da war ein Link übrig von Ihrem Code. Jetzt sollte es funktionieren – Moosli

+0

ich kann immer noch nicht zur Arbeit, es wird nicht durchlaufen und wählen Sie die Dateien für mich zeigt es nur die Datei öffnen Dialogfeld @Moosli –

Verwandte Themen