我认为应该很简单,但似乎无法让它发挥作用。试过两种方法将文本文件(.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,但不会分割文件
非常感谢
答案 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