【问题标题】:Select most recent of multiple files, then import to one Excel sheet选择多个文件中的最新文件,然后导入到一张 Excel 工作表
【发布时间】:2016-03-22 18:23:37
【问题描述】:

我无法找到一种方法来选择同一文件夹中多个文件的最新版本并将它们导入 Excel。例如:

文件夹中的文件: 西班牙语.csv 西班牙语(1).csv 西班牙语(2).csv 英文.csv 英文(1).csv 法语.csv (这里还有更多的语言和文件,但为了简单起见,我只包括这些)

从那个文件夹中,我想选择这些文件: 西班牙语(2).csv 英文(1).csv 法语.csv

并将它们导入到一个现有的工作表中。

到目前为止我有:

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

此代码实际上不起作用,因为我将几个部分拼凑在一起,而且我什至不知道我是否走在正确的轨道上。有人可以帮帮我吗?

【问题讨论】:

标签: vba excel


【解决方案1】:

将下面的循环放在你写的区域内:

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

【讨论】:

  • Ok :) 我最近开始使用类似这样的方法从字符串 Split(Split(strInput, "(")(1), ")")(0 ) 比 mid 少一点。
  • 谢谢@Scott Holtzman。我按照您的建议做了,并且在西班牙语 = Dir 处收到以下错误。 "无效的过程调用或参数"
  • @KimberWarden - 这很奇怪。当我测试时,代码对我有用。此外,这是一条非常标准的线路(参见here
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2021-01-27
  • 1970-01-01
相关资源
最近更新 更多