【发布时间】:2021-08-25 21:49:13
【问题描述】:
我有一个数据库,可以在 .CSV 中提取数据并使用 VBA 将数据导入 Excel,但导入时,ID 中缺少一些前导零
即使我在 Excel 中打开 .CSV 文件,这些零也不存在。 这是我正在使用的当前代码:
sub import()
Dim File As String
MsgBox "Please select the Extract File", vbInformation
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.InitialFileName = "\\route"
.AllowMultiSelect = False
.Filters.Add "csv", "*.csv"
If .Show = -1 Then
File = .SelectedItems(1)
Else
MsgBox "Please, select the file then try again", vbExclamation
Exit Sub
End If
End With
With Worksheets("Data Paste").QueryTables.Add(Connection:= _
"TEXT;" & File _
, Destination:=Worksheets("Data Paste").Range("$A$1"))
.Name = "FileName"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileTrailingMinusNumbers = True
.TextFileColumnDataTypes = Array(xlTextFormat)
.Refresh BackgroundQuery:=False
End With
Exit Sub
我尝试事先将工作表的格式更改为 TEXT,但即使该数据是文本格式,这些零仍然丢失。
编辑 1:我用记事本打开了 .CSV,那些前导零就在那里。但不是当我用 Excel 打开它时
【问题讨论】:
-
“即使我打开 .CSV 文件,这些零也不存在” - 你是在 excel 中打开文件吗?您是否尝试过(例如)记事本?如果某些东西看起来像一个数字,那么 Excel 将对其进行转换并删除任何前导零。您的文件中有多少个字段/列?
-
@TimWilliams 是的,我在记事本中打开了该文件并且零在那里,但是当使用 VBA 将它们导入 Excel 时,这些零丢失了。用 excel 打开 CSV 也不会显示那些前导零。
-
数据中是否只有一列?
-
@TimWilliams 不,它包含 39 列
-
.TextFileColumnDataTypes = Array(xlTextFormat)只会将文本格式应用于第一列。 "返回或设置一个 有序的常量数组,指定应用于您正在导入的文本文件中的相应列到查询表中的数据类型。每列的默认常量是 xlGeneral。阅读/写变体。” docs.microsoft.com/en-us/office/vba/api/…
标签: excel vba csv leading-zero