【发布时间】:2014-06-07 13:30:58
【问题描述】:
我编写了一个宏来获取 Excel 工作表的内容并将它们导出到 CSV 文件(供其他应用程序导入)。
我的问题是,在导出时,任何包含可以解释为数字的文本的单元格都会转换为数字。这意味着如果文本包含前导零,这些零就会丢失。
所以,这样的数据:
资产 0100738 1/05/2003 612
将导出为
资产,100738,1/05/2003,612
我的代码是:
Public Sub ExportSheetAsCSV(ByRef sh As Worksheet)
Dim dataToExport As Excel.Range
Dim newWrkbk As Excel.Workbook
Dim FSO As New FileSystemObject
Dim dstdir As String
Dim dstpath As String
Set dataToExport = sh.UsedRange
Set newWrkbk = newWorkbook(1, ActiveWorkbook)
'' Copy Step:
newWrkbk.Sheets("Sheet1").Range("A1").Resize(dataToExport.Rows.Count, dataToExport.Columns.Count).Value = dataToExport.Value
dstdir = FSO.BuildPath(FSO.BuildPath(ActiveWorkbook.path, "CSVs"), FSO.GetBaseName(ActiveWorkbook.Name))
dstpath = FSO.BuildPath(dstdir, sh.Name & ".csv")
MkDirStructure dstdir
newWrkbk.SaveAs Filename:=dstpath, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
newWrkbk.Close False
End Sub
通过逐步完成此操作,我可以看到前导零在复制步骤(与保存步骤相反)消失了。
这个问题,VBA: preceding zeros dropped when copied over,涵盖了一个类似的问题,但没有一个给定的答案对我有用。接受的答案是将有问题的单元格转换为文本(另一个最佳答案是使用 VBA 的 numberFormat 做同样的事情),但是
- 我事先不知道需要转换哪些单元格,所以很不方便
- 单元格的值由公式更新,因此如果我转换为文本,则公式的文本将成为单元格的值
- 日期值将转换为其整数表示形式
- 这甚至不起作用。将单元格转换为文本后,前导零仍会被去除。
有人能解决这个问题吗?
谢谢
【问题讨论】: