2016-03-22 2 views
0

Ich habe Probleme, die neueste Version mehrerer Dateien im selben Ordner auszuwählen und sie in Excel zu importieren. Zum Beispiel:Wählen Sie die letzte der mehreren Dateien aus und importieren Sie sie anschließend in eine Excel-Tabelle.

Dateien im Ordner: Spanish.csv Spanisch (1) .csv Spanisch (2) .csv English.csv Englisch (1) .csv French.csv (Es gibt viele mehr Sprachen und Dateien hier, aber ich bin auch nur diese der Einfachheit halber)

Von diesem Ordner, möchte ich diese Dateien auszuwählen: Spanisch (2) .csv Englisch (1) .csv French.csv

und importieren Sie sie int o ein bestehendes Arbeitsblatt.

Bisher habe ich:

Sub GetFiles() 

    Dim MyPath As String 
    Dim Spanish As String 
    Dim English As String 
    Dim French As String 
    Dim LanguageFiles(2) As String 

    MyPath = "C:\example\" 

    'Make sure that the path ends in a backslash 
    If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\" 

    Spanish = Dir(MyPath & "Spanish*.csv") 
    English = Dir(MyPath & "English*.csv") 
    French = Dir(MyPath & "French*.csv") 

    I WANT TO SOMEHOW GET THE MOST RECENT VERSION OF EACH AND PASS IT TO THE LANGUAGEFILES ARRAY AND IMPORT IT TO A SINGLE WORKSHEET. 

    LanguageFiles(0) = Spanish 
    LanguageFiles(1) = English 
    LanguageFiles(2) = French 

For i = LBound(LanguageFiles) To UBound(LanguageFiles) 
     With ActiveSheet.QueryTables.Add(Connection:= _ 
      "TEXT;" & LanguageFiles(i), Destination:=Range("A" & Rows.Count).End(xlUp).Offset(1, 0)) 
      .Name = "Sample" 
      .FieldNames = False 
      .RowNumbers = False 
      .FillAdjacentFormulas = False 
      .PreserveFormatting = True 
      .RefreshOnFileOpen = False 
      .RefreshStyle = xlInsertDeleteCells 
      .SavePassword = False 
      .SaveData = True 
      .AdjustColumnWidth = True 
      .RefreshPeriod = 0 
      .TextFilePromptOnRefresh = False 
      .TextFilePlatform = 437 
      .TextFileStartRow = 1 
      .TextFileParseType = xlDelimited 
      .TextFileTextQualifier = xlTextQualifierDoubleQuote 
      .TextFileConsecutiveDelimiter = False 
      .TextFileTabDelimiter = False 
      .TextFileSemicolonDelimiter = False 
      .TextFileCommaDelimiter = True 
      .TextFileSpaceDelimiter = False 
      .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
      .TextFileTrailingMinusNumbers = True 
      .Refresh BackgroundQuery:=False 
     End With 
    Next i 
End Sub 

Dieser Code tatsächlich funktioniert nicht, weil ich zusammen mehrere Stücke cobbling bin, und ich weiß nicht, ob ich noch auf dem richtigen Weg bin. Kann mir bitte jemand helfen?

+0

Blick auf das Filesystem verwenden und die datelastmodifed, und Sie können wie bei der Suche verwenden, also wenn fl.name wie „* Spanisch *“, dann vergleichen Sie das Datum .... –

+0

http: // Stackoverflow .com/questions/9205137/using-vbscript-find-most-recent-Datei-Datum-in-einem-einzigen-Ordner –

+0

http://www.4guysfromrolla.com/webtech/faq/FileSystemObject/faq5.shtml –

Antwort

0

Legen Sie die unten Schleife in dem Bereich, wo Sie schreibt:

I WANT TO SOMEHOW GET THE MOST RECENT VERSION OF EACH AND PASS IT TO THE LANGUAGEFILES 

Ich schrieb die Schleife für die spanischen Dateien, aber Sie können eine weitere Schleife leicht fügen Sie das Französisch, Englisch zu erfassen, usw. Datei und Passen Sie die Variablennamen an, die in das Array LanguageFiles geladen werden sollen.

Do While Spanish <> "" 

     If InStr(1, Spanish, "(") Then 'test to see if there is a number 

      Dim bVersion As Boolean 
      bVersion = True 'set this variable to true for later 

      'extract which version it is - will work for any digit version number 
      Dim iVersionTest As Integer, iVersion As Integer 
      iVersionTest = CInt(Mid(Spanish, InStr(1, Spanish, "(") + 1, InStr(1, Spanish, ")") - InStr(1, Spanish, "(") - 1)) 
      'for another method see 
      'iVersionTest = CInt(Split(Split(Spanish,"(")(1),")")(0) 

      'is current version greater than what is already stored? if so, make it latest version 
      Dim sLatestVersion 
      If iVersionTest > iVersion Then 
       sLatestVersion = Spanish 
       iVersion = iVersionTest 
      End If 

     Else 

      'if there's no other version make the lone file the latest version 
      If Not bVersion Then sLatestVersion = Spanish 

     End If 

     Spanish = Dir 

Loop 

LanguageFiles(0) = sLatestVersion 
+1

Ok :) Ich habe vor kurzem angefangen, etwas wie diese zu verwenden, um die Zahl innerhalb von Klammern in einer Zeichenkette zu extrahieren (Split (strInput, "(") (1), ")") (0) weniger zu verfolgen als Mitte . –

+0

guten Punkt @Nathan_Sav –

+0

Danke, @ Scott Holtzman. Ich habe getan, wie Sie vorgeschlagen haben, und bekomme den folgenden Fehler bei Spanisch = Dir. "Ungültiger Prozeduraufruf oder Argument" –

Verwandte Themen