Excel VBA将文本文件导入Excel,并将指定列转换为文本



我目前正在处理一项任务,这只是简单地通过VBA将文本文件导入excel。

问题是,我想写一个VBA代码转换变量"数字"仅作为文本格式,在导入文本文件时不会更改其他变量,因此,第一个数字"0"在导入到excel后会保留

下面是示例,但文本文件实际上包含100多个变量,录制宏似乎不适合这么多变量。

文本文件:

DataDate|Model|Status|Status Timestamp |Number |xxx

2021-02-02投资者批准| | | 2021-02-02 15:54:58 | 0312475 | asdfasfsdf

2021-02-02投资者批准| | | 2021-02-02 23:01:30 | 0312475 | asdfasfsdf

2021-02-02 |中| |批准2021-02-02 16:49:48 | 0312475 | asdfasfsdf

请过目并提出建议。多谢。

因为我想有代码导入一个文本文件有超过100个变量,但只转换变量"数字"为文本。谢谢。

Workbooks.OpenText Filename:=fdata & intxt1, _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, _
Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 2), Array(6, 1)),
TrailingMinusNumbers:=True, _
Local:=True

如果只需要以文本形式打开特定列,那么创建一个包含该列的数组就足够了,如FieldInfo。假设这个列是第100列,那么编写这样一个数组的数组就比较困难了。在这种情况下,您可以使用下面的代码,自动构建必要的数组:

Sub importTextFormatOneCol()
Dim fileToOpen As String, arr(), i As Long, colsNo As Long, colString As Long

colsNo = 100: colString = 5
ReDim arr(colsNo - 1)
For i = 0 To UBound(arr)
Select Case i
Case colString - 1 'here it can be an enumeration of cases (-1 because of base zero array)
'Case 4, 10, 21 ' in such a chase, the columns 5, 11, 22 will be formatted As Text
arr(i) = Array(i + 1, 2)
Case Else
arr(i) = Array(i + 1, 1)
End Select
Next i
Workbooks.OpenText fileName:=fdata & intxt1, _
origin:=932, startRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="|", FieldInfo:=arr()
End Sub

可以改进代码以自动确定要打开的文本文件中的实际列数。不复杂,但不构成问题的对象。

最新更新