2016-03-22 3 views
0

同じフォルダ内の複数のファイルの最新バージョンを選択してExcelにインポートする方法がわかりません。例:フォルダ内のファイル複数のファイルの中から最近のファイルを選択して1枚のExcelシートにインポート

: Spanish.csv スペイン語(1) スペイン語を.csvファイルは、(2) English.csv 英語を.csvファイルには、(1)(多くはありFrench.csv を.csvファイルそのフォルダから、ここではより多くの言語やファイルが、私は簡単にするためにのみこれらを含むよ)

、私はこれらのファイルを選択します: スペイン語(2) 英語を.csvファイル(1).CSV French.csv

とそれをintにインポートする既存のワークシート1枚。

これまでのところ私が持っている:私は一緒にいくつかの部分をcobblingてるので

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 

このコードは実際には動作しませんし、私も正しい軌道に乗ってるかどうかは知りません。誰かが私を助けてくれますか?

+0

FileSystemObjectオブジェクトを使用してを見て、datelastmodifed、および「*スペイン語*」のようなfl.nameは、日付を比較するので、もしあなたが、検索のように使用することができます.... –

+0

ます。http:// stackoverflowの.com/questions/9205137/using-vbscript-to-find-latest-file-a-single-a-folder-a-single-folder –

+0

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

答えて

0

場所あなたが書いた領域内の下記のループ:

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

は、私はスペイン語のファイルのループを書きましたが、あなたは簡単にフランス語、英語、などをキャプチャするために別のループを追加することができ、ファイルや変数名をLanguageFiles配列にロードするように調整します。

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 :)私は最近、文字列内の括弧内の数字を抽出するためにこのようなものを使い始めました。Split(分割(strInput、 "(")(1)、 ")")(0) 。 –

+0

良い点@Nathan_Sav –

+0

ありがとう、@スコット・ホルツマン。私はあなたが示唆したように、スペイン語= Dirで次のエラーを取得しています。 "無効なプロシージャ呼び出しまたは引数" –

関連する問題