【问题标题】:Change code to allow for mutliple file selection更改代码以允许选择多个文件
【发布时间】:2019-03-31 00:47:39
【问题描述】:

我一直在使用宏将多个 .txt 文件导入我的活动 Excel 工作簿(请参见下文)。我想以一种允许我选择要导入的文件并以相同方式运行的方式对其进行更改。我尝试使用“Application.GetOpenFilename(FileFilter:="Text Files (.txt), .txt", MultiSelect:=True, Title:="Text Files to Open") em>”,但我收到类型不匹配错误。 我觉得这应该不是什么大问题,但我似乎无法解决这个问题。

非常感谢任何建议。

Sub TxtImporter()
Dim f As String, flPath As String
Dim i As Long, j As Long
Dim ws As Worksheet

Application.DisplayAlerts = False
Application.ScreenUpdating = False

flPath = ThisWorkbook.Path & Application.PathSeparator
i = ThisWorkbook.Worksheets.Count
j = Application.Workbooks.Count
f = Dir(flPath & "*.txt")

Do Until f = ""
    Workbooks.OpenText flPath & f, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
        Space:=False, Other:=False, TrailingMinusNumbers:=True
    Workbooks(j + 1).Worksheets(1).Copy After:=ThisWorkbook.Worksheets(i)
    ThisWorkbook.Worksheets(i + 1).Name = Left(f, Len(f) - 4)
    Workbooks(j + 1).Close SaveChanges:=False
    i = i + 1
    f = Dir
Loop

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

【问题讨论】:

    标签: excel vba file import


    【解决方案1】:

    请尝试你的代码(这是一段很好的鳕鱼e)稍微调整一下

    Sub TextImporter2()
    Dim f As String, flPath As String
    Dim i As Long, j As Long
    Dim ws As Worksheet
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    flPath = ThisWorkbook.Path & Application.PathSeparator
    i = ThisWorkbook.Worksheets.Count
    j = Application.Workbooks.Count
    
    FileNames = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", MultiSelect:=True, Title:="Text Files to Open")
    If VarType(FileNames) = vbBoolean Then
    MsgBox "No Files Selected"
    Exit Sub
    End If
    
    For Fno = LBound(FileNames) To UBound(FileNames)
        Workbooks.OpenText FileNames(Fno), _
            StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
            Space:=False, Other:=False, TrailingMinusNumbers:=True
        f = ActiveWorkbook.Name
        Workbooks(j + 1).Worksheets(1).Copy After:=ThisWorkbook.Worksheets(i)
        ThisWorkbook.Worksheets(i + 1).Name = Left(f, Len(f) - 4)
        Workbooks(j + 1).Close SaveChanges:=False
        i = i + 1
    Next Fno
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    End Sub
    

    如果对你有帮助,我会很高兴。但是,您可以在命名新添加的工作表并添加预防措施之前检查工作表名称的存在。

    【讨论】:

    • 效果很好!我理解你的所作所为,所以我也学到了一些东西。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 2020-11-07
    • 2015-06-05
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2013-05-29
    • 2015-10-10
    相关资源
    最近更新 更多