【发布时间】:2021-06-24 10:14:30
【问题描述】:
我有这段代码可以帮助将文本文件导入 excel。它旨在成为 Excel 无法处理超过 15 个字符的数字的解决方法。
我正在尝试找出一种方法来将此代码 .TextFileColumnDataTypes = Array(1, 2, 1, 1, 1, 1) 更改为可以通过文件自动检查列是否包含数字 16 个字符的内容或更长,并自动将它们切换为文本值以保留其格式。
Sub Text_import()
Dim Ret
Ret = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
If Ret <> False Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Ret, Destination:=Range("$A$1"))
.Name = "Sample"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 2, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
结束子
【问题讨论】:
-
按照你的描述,你的方法行不通。如果长数字以数字格式导入 Excel,然后“切换回”为文本,则它们已经损坏。无法通过“返回”数字来恢复丢失的数字。因此,您必须严格以文本格式导入相关列。
-
我们可以看看您正在导入的 .CSV 文件的示例吗?
-
嗯,就是这样,如果它是一个标准文件,我可以指定哪些列应该被视为文本。例如,如果一个文件的订单 ID 为 16 位,共有 5 列,则可以使用 .TextFileColumnDataTypes = Array(1, 2, 1, 1, 1, 1)。但是,我想知道 vba 是否有可能在导入文件之前循环遍历列以检查其中是否有任何数字和超过 15 个字符。