我的Excel VBA代码有一个奇怪的问题。我在CSV电子表格中有一个日期字符串列,我想用双引号括起来。 我在Excel中编写了一个VBA脚本来实现这一目标。但是,每次运行我的脚本时,日期字符串输出都包含在三组双引号中,而不是一组。
我明白了:
"""2015-11-11 00:00:00.40""",59845,-0.20375,3.447,2.0135,32.08286,12,32,11.6
而不是:
"2015-11-11 00:00:00.40",59845,-0.20375,3.447,2.0135,32.08286,12,32,11.6
我哪里可能出错?我尝试使用CHAR(34)
和CHR(34)
代表"
,但这没有帮助。
这是我的剧本:
Sub Quotations()
'
' Quotations Macro
'
'
Dim StrFile As String
StrFile = Dir("E:\Copy\*.csv")
' Create new workbook and assign to variable
Dim wb As Workbook
Do While Len(StrFile) > 0
Set wb = Workbooks.Add
Windows("PERSONAL.XLSB").Activate
wb.Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;E:\Copy\" + StrFile, Destination:= _
Range("$A$1"))
.Name = "E:\Copy\" + StrFile
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("J1").Select
ActiveCell.FormulaR1C1 = "=CHR(34)&RC[-9]&CHR(34)"
Range("J2").Select
Columns("J:J").ColumnWidth = 23.57
Range("J1").Select
Selection.AutoFill Destination:=Range("J1:J864000")
Range("J1:J864000").Select
Selection.Copy
Columns("A:A").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("J:J").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
'ActiveWindow.SmallScroll Down:=-6
ActiveWorkbook.SaveAs Filename:= _
"E:\Copy\quotes\" + StrFile, FileFormat:= _
xlCSV, CreateBackup:=False
ActiveWindow.Close savechanges:=False
StrFile = Dir
Loop
End Sub
我做错了什么?在此先感谢您的帮助。
答案 0 :(得分:0)
来自https://en.wikipedia.org/wiki/Comma-separated_values
“包含换行符,双引号和/或逗号的字段应为 引用了“
当您将修改后的文件另存为CSV时,Excel会看到您添加的引号,因此会在这些字段周围添加引号。当它这样做时,它也会将你添加到 escape 中的引号加倍(因此解析保存文件的程序不会将它们解释为字段引号)
如果您在Excel中重新打开CSV文件,您会看到它已正确解析,并且只显示您添加的单组引号。