以下代码在列中包含前导零时删除前导零。我认为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
答案 0 :(得分:3)
当涉及到前导零时,Excel非常讨厌。我发现使这项工作的唯一方法是让所有接收粘贴数据的单元格预先格式化为“文本”。不是'一般'或其他任何东西,只是'文字'。在粘贴数据之前,必须将单元格格式化为“文本”。如果您在粘贴数据后尝试执行此操作,则前导零将丢失。
如果你这样做,那么你甚至不需要PasteSpecial。
如果目标单元格格式不正确,则PasteSpecial将无效。 Excel将始终尝试将任何看起来像数字的内容解释为数字。
这绝对不理想,因为它可能需要您计算所有数据,然后在工作表上格式化那么多单元格,但这是我发现的唯一方法是万无一失。
答案 1 :(得分:3)
我不知道它在哪个版本中引入,但在Excel 2010中,您可以使用
Paste:=xlPasteFormulasAndNumberFormats
而不是
Paste := xlPasteValues
并且在非常短的测试的基础上,这似乎有效(假设您的原始输入首先是数字)。