打开文本文件和Split()以感叹号作为分隔符

时间:2016-02-05 13:32:17

标签: excel vba text-files delimiter

我认为应该很简单,但似乎无法让它发挥作用。试过两种方法将文本文件(.txt)打开到excel并通过Other选项拆分:“!”

Set workbookbk = Workbooks.OpenText(fullfilepath, xlMSDOS, _
xlDelimited, xlDoubleQuote, False, False, False, False, False, True, "!")

这种语法很好,但后来说“编译错误:预期的功能或变量”我错过了什么?!

我也用过

Set workbk = Workbooks.Open filename:= fullfilepath, Delimiter:= "!"

这会打开文件ok,但不会分割文件

非常感谢

1 个答案:

答案 0 :(得分:2)

如果您要从方法中跳过参数,则需要明确指定 提供的参数:

Workbook.OpenText语法 (来自MSDN

  

表达 OpenText 文件名 来源 StartRow 数据类型 TextQualifier < / em> ConsecutiveDelimiter 标签 分号 逗号 空间 其他 < / strong>, OtherChar FieldInfo TextVisualLayout DecimalSeparator ThousandsSeparator TrailingMinusNumbers 本地

     

expression 表示Workbooks对象的变量。

在您的代码中,您错过了一些参数,但编译器会假设您已按照该方法的预期顺序提供参数,除非您指定哪些参数你过世了。例如:

Workbooks.OpenText Filename:=fuullfilepath, Origin:=xlMSDOS, DataType:=xlDelimited, Other:=True, OtherChar:="!"

此外,可能不是您希望的答案,但是我在不使用.OpenText()方法的情况下编写了一个UDF来完成类似的事情:

Function MM_OpenTextFile(vPath As String, delim As String) As Variant

Dim FF As Integer
Dim lineArray As Variant
Dim temp As String
Dim arrayList As Object

Set arrayList = CreateObject("System.Collections.ArrayList")

FF = FreeFile

Open vPath For Input As #FF
    While Not EOF(FF)
        Line Input #FF, temp
        lineArray = Split(temp, delim)
        arrayList.Add lineArray
        Erase lineArray
    Wend
Close #FF

MM_OpenTextFile = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arrayList.ToArray()))

arrayList.Clear

Set arrayList = Nothing

End Function

以下是您将如何使用它的示例:

Sub Foo()

Dim ar As Variant '// Must be a Variant to work   

'// Change to a file and delimiter of your choosing...
ar = MM_OpenTextFile("C:\Users\Macro Man\SomeFile.txt", "!")

With Range("A1").Resize(UBound(ar, 1), UBound(ar, 2))
    .NumberFormat = "@" '// Change format to "text"
    .Value = ar '// insert array values
End With

End Sub