初学VBA请大家多多关照(关于OpenText)
一个关于OpenText的问题
我写了一个打开文本文件的函数,但是就是OpenText提示我缺少参数或者变量没有定义。
我真的不知道我错在什么地方了,请大伙教教新人吧
Function openTextFile(ByVal filePath As String) As Excel.Workbook
Dim resPath As String
resPath = filePath
If Dir(resPath) = "" Then
openTextFile = Nothing
Return
End If
Set openTextFile = workbooks.openText(Filename:=resPath, _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=True, _
Semicolon:=False, _
Comma:=False, _
Space:=False, _
Other:=False, _
FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True)
End Function
[解决办法]
expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)
expression 必需。该表达式返回“应用于”列表中的一个对象。
FileName String 类型,必需。指定要载入并作分列处理的文件名。
Origin Variant 类型,可选。指定文本文件来源。可为以下 XlPlatform 常量之一:xlMacintosh、xlWindows 或 xlMSDOS。此外,它还可以是代表所需代码页的代码页编号的整数。例如,“1256”说明源文本文件的编码是阿拉伯语 (Windows)。如果省略该参数,则此方法就会使用“文本导入向导”中“文件原始格式”选项的当前设置。
StartRow Variant 类型,可选。作分列处理的起始行号。默认值为 1。
DataType Variant 类型,可选。在文件中指定数据的列格式。可为以下 XlTextParsingType 常量之一:xlDelimited 或 xlFixedWidth。如果未指定该参数,则 Microsoft Excel 将在打开此文件时确定列格式。
TextQualifier XlTextQualifier 类型,可选。指定文本识别符。
XlTextQualifier 可为以下 XlTextQualifier 常量之一。
xlTextQualifierDoubleQuote 默认值
xlTextQualifierNone
xlTextQualifierSingleQuote
ConsecutiveDelimiter Variant 类型,可选。如果该值为 True,则将连续的分隔符号作为一个分隔符号处理。默认值为 False。
Tab Variant 类型,可选。如果该值为 True,则将分隔符设为制表符(DataType 必须设为 xlDelimited)。默认值为 False。
Semicolon Variant 类型,可选。如果该值为True,则将分隔符设为分号(DataType 必须设为 xlDelimited)。默认值为 False。
Comma Variant 类型,可选。如果该值为 True,则将分隔符设为逗号(DataType 必须设为 xlDelimited)。默认值为 False。
Space Variant 类型,可选。如果该值为 True,则分隔符设为空格(DataType 必须设为 xlDelimited)。默认值为 False。
Other Variant 类型,可选。如果该值为True,则将分隔符设为由 OtherChar 参数指定的字符(DataType 必须设为 xlDelimited)。默认值为 False。
OtherChar Variant 类型,可选(如果 Other 为 True,则必需)。当 Other 为 True 时,指定分隔字符。如果指定了多个字符,则将字符串中的第一个字符作为分隔符,并忽略其余的字符。
FieldInfo xlColumnDataType 类型,可选。包含各数据列分析信息的数组。对本参数的解释取决于 DataType 值。如果此数据由分隔符分隔,本参数为由两元素数组组成的数组,其中每个两元素数组指定一个特定列的转换选项。第一个元素为列标(从 1 开始),第二个元素是 XlColumnDataType 常量之一,用以指定如何分析该列。
XlColumnDataType 可为以下 XlColumnDataType 常量之一。
xlGeneralFormat 常规
xlTextFormat 文本
xlMDYFormat MDY 日期
xlDMYFormat DMY 日期
xlYMDFormat YMD 日期
xlMYDFormat MYD 日期
xlDYMFormat DYM 日期
xlYDMFormat YDM 日期
xlEMDFormat EMD 日期
xlSkipColumn 忽略列
只有在安装并选定了台湾地区语言支持时才可使用 xlEMDFormat。xlEMDFormat 常量指定使用台湾地区纪年日期。
列识别符可为任意顺序。输入数据中如果某列没有列识别符,则用常规设置对该列进行分列处理。
注释
在指定要跳过的列时,必须明确说明其余各列的类型,否则数据不能正确拆分。
如果数据中包含可识别的日期,则工作表中单元格的格式就会设置为“日期”,即便为该列设置的格式为“常规”。此外,如果您为某一列指定了以上日期格式中的一种格式,而数据中并不包含可识别的日期,那么工作表中单元格的格式为“常规”。
本示例将第三列作为 MDY(例如,01/10/1970) 处理,第一列作为文本处理,源数据中其他列以“常规”设置进行分列处理。
Array(Array(3, 3), Array(1, 2))
如果源数据为定宽列,则每个两元数组的第一个元素指定起始元素在列中的位置,(用整数表示,第一个字符为 0 (零)),第二个元素用 0 到 9 的数字指定分列选项,如前表所示。
TextVisualLayout Variant 类型,可选。文字的可视布局。
DecimalSeparator Variant 类型,可选。表示在识别数字时,Microsoft Excel 使用的小数位分隔符。默认设置为系统设置。
ThousandsSeparator Variant 类型,可选。 表示在识别数字时,Excel 使用的千位分隔符。默认设置为系统设置。
下表显示了使用不同的导入设置向 Excel 中导入文本时的结果。数字结果显示在最右边的列中。
系统小数位分隔符 系统千位分隔符 小数位分隔符值 千位分隔符值 导入的文本 单元格的值(数据类型)
句点 逗号 逗号 句点 123,123.45 123,123.45(数字)
句点 逗号 逗号 逗号 123,123.45 123,123.45(文本)
逗号 句点 句点 逗号 123,123.45 123,123.45(数字)
句点 逗号 句点 逗号 123,123.45 123 123.45(文本)
句点 逗号 句点 空格 123,123.45 123,123.45(数字)
TrailingMinusNumbers Variant 类型,可选。
Local Variant 类型,可选。
[解决办法]
1、错误原因
因为openText方法不返回对象,所以产生错误。
2、正确做法
应该按照属性要求打开Excel:
Workbooks.OpenText Filename:=resPath, _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=True, _
Semicolon:=False, _
Comma:=False, _
Space:=False, _
Other:=False, _
FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
然后操作Workbook对象:
Set openTextFile = Application.Workbooks(1)
即做法应该如下:
Function openTextFile(ByVal filePath As String) As Excel.Workbook
Dim resPath As String
resPath = filePath
If Dir(resPath) = "" Then
openTextFile = Nothing
Return
End If
Workbooks.OpenText Filename:=resPath, _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=True, _
Semicolon:=False, _
Comma:=False, _
Space:=False, _
Other:=False, _
FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Set openTextFile = Application.Workbooks(1)
End Function