使用vba在excel中复制带有前导零的数字文本

我已经写了一个macros来获取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:前面的零在复制时被删除 ,涉及类似的问题,但是没有给出的答案适用于我。 接受的答案是将不正确的单元格转换为文本(而另一个最重要的答案是使用VBA的numberFormat做同样的事情),但

  1. 我不知道哪些单元格需要转换,这是不方便的
  2. 单元格的值由公式更新,所以如果我将其转换为文本,则公式的文本将成为单元格的值
  3. date值将被转换为整数表示
  4. 这甚至不起作用。 将单元格转换为文本后,前导零仍然被剥离。

有没有人有解决这个问题?

谢谢

'将所有单元格的格式转换为文本,并在复制数据之前为所需的单元格范围添加下面的行。

范围(“B1:X100000”)。NumberFormat =“@”

好的,在做了一些更多的工作之后,我发现的解决方法是做一个复制/粘贴专用,而不是将目标范围的值分配给源的值。

所以,这一行:

 newWrkbk.Sheets("Sheet1").Range("A1").Resize(dataToExport.Rows.Count, dataToExport.Columns.Count).Value = dataToExport.Value 

被replace

 Application.CutCopyMode = False Set oldWrkbk = ActiveWorkbook dataToExport.Copy newWrkbk.Sheets("Sheet1").Activate Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False oldWrkbk.Activate 

对源工作簿的引用被caching,以便在closures新文件之前,我们可以返回到我们开始的位置。