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 

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

 Paste:=xlPasteFormulasAndNumberFormats 

代替

 Paste := xlPasteValues 

并在很短的testing的基础上,这似乎工作(假设您的原始input数字在第一位)。

当涉及到前导零时,Excel非常令人讨厌。 我发现做这个工作的唯一方法是让所有将接收粘贴数据的单元格格式化为“文本”。 不是“一般”或其他什么,只是“文字”。 在粘贴数据之前,必须将单元格格式化为“文本”。 如果在数据粘贴后尝试这样做,则前导零将已经丢失。

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

如果目标单元格格式不正确,则PasteSpecial将不起作用。 Excel总是试图将任何看起来像数字的东西解释为一个数字。

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