2

以下代码在列中包含前导零时会删除它们。我认为 PasteSpecial 会解决这个问题。有没有办法确保在此子填充 CSV 时保留任何前导零?

Sub PasteStufff()

Dim myRange As Range
Dim outFile As String

outFile = "mypath\path\file.csv"

Set myRange = Sheets("base").Range("A1:G1")
Set myRange = Range(myRange , myRange .End(xlDown))
Sheets("base").Select
myRange.Select
Selection.Copy
    Workbooks.Add
    ActiveSheet.Cells(1, 1).PasteSpecial xlPasteValues
    ActiveWorkbook.SaveAs Filename:= _
    outFile _
    , FileFormat:=xlCSV, CreateBackup:=False
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True

End Sub
4

2 回答 2

3

Excel 在前导零方面非常令人讨厌。我发现完成这项工作的唯一方法是将接收粘贴数据的所有单元格预先格式化为“文本”。不是“一般”或其他任何东西,只是“文本”。在粘贴数据之前,您必须将单元格格式化为“文本”。如果您在粘贴数据后尝试执行此操作,则前导零已经丢失。

如果你这样做,那么你甚至不需要 PasteSpecial。

如果目标单元格的格式不正确,PasteSpecial 将不起作用。Excel 将始终尝试将任何看起来像数字的东西解释为数字。

这绝对不理想,因为它可能需要您计算所有数据,然后在工作表上格式化那么多单元格,但这是我发现的唯一万无一失的方法。

于 2013-09-17T20:57:58.653 回答
3

我不知道它是在哪个版本中引入的,但是在 Excel 2010 中,您可以使用

Paste:=xlPasteFormulasAndNumberFormats

代替

Paste := xlPasteValues

并且基于非常短的测试,这似乎有效(假设您的原始输入首先是数字)。

于 2013-09-17T21:02:50.287 回答