Excel VBA不会粘贴前导零

时间:2013-09-17 20:47:23

标签: excel vba

以下代码在列中包含前导零时删除前导零。我认为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

2 个答案:

答案 0 :(得分:3)

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

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

如果目标单元格格式不正确,则PasteSpecial将无效。 Excel将始终尝试将任何看起来像数字的内容解释为数字。

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

答案 1 :(得分:3)

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

Paste:=xlPasteFormulasAndNumberFormats

而不是

Paste := xlPasteValues

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