【问题标题】:Excel VBA won't paste leading zerosExcel VBA 不会粘贴前导零
【发布时间】:2013-09-22 11:12:38
【问题描述】:

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

【问题讨论】:

  • 最初如何保留前导零?是否使用撇号或单元格的自定义格式,或者单元格被格式化为文本?粘贴时或保存并重新打开 csv(在 Excel 中)后,前导零是否丢失?
  • 我很确定您会想要粘贴特殊的格式和值。
  • 将范围格式化为文本。

标签: excel vba


【解决方案1】:

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

Paste:=xlPasteFormulasAndNumberFormats

而不是

Paste := xlPasteValues

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

【讨论】:

  • 是的,就是这么简单。
【解决方案2】:

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

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

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

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

【讨论】:

  • @Andy G,你是对的,10K 肯定看起来更好。 :) 是的,对于正在阅读本文的其他人,我们完全滥用了 cmets 部分。 :O
  • 如果前导零应用于 csv,但文件在 Excel 中重新打开,则 Excel 可能会再次删除它们。要防止这种情况发生,请使用“数据”选项卡、“获取外部数据”并使用“文本导入向导”将列格式化为文本。步骤outlined here
猜你喜欢
  • 2017-05-08
  • 2014-09-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多