【问题标题】:VBA: Range().Copy Pastes Same Input in Two Different Formats to Separate DestinationsVBA:Range().Copy 以两种不同的格式将相同的输入粘贴到不同的目标
【发布时间】:2022-08-03 00:16:41
【问题描述】:

我正在尝试在 Excel VBA 中编写一个应用程序,它本质上是:

  1. 将某些列从工作簿复制到新创建的工作簿。
  2. XLookUps ID 来自这个新工作簿的不同 wb 以获取其他信息。

    所有输入的 WB\'s 都从公司系统导出为 .tsv 文件,当使用 Excel 定期打开时似乎没问题。

    我的问题是,在 Step.1 中有一个包含数量信息(主要是整数)的列,但是在某些情况下,数量可能是 26.5 或 8.7。

    在这些情况下,导出的输入文件显示 26.May 或 8.Jul(上方矩形中的 26.05.2022),这不是问题,保持这种方式非常好。问题是,当我将此数量列从输入工作簿复制到通过 VBA 创建的数量列时,26.May 变为 26,5。我希望它保持为 26.May,因为在查找文件中也是如此。

    目前复制代码为:

    sourceWB.Worksheets(1).Range(\"O2:O\" & lastRow).Copy _
         pasteWB.Worksheets(1).Range(\"J2:J\" & lastRow)
    

    我尝试失败的调整是:

    • 使用 Range().PasteSpecial Paste:=xlPasteFormats 和 Paste:=xlPasteValues
    • 将列值存储在变量数组中并从中设置目标范围值
    • 将小数分隔符从 \",\" 切换为 \".\"

    还有另一个有趣的细节。我还尝试将整个查找文件复制到在 VBA 中创建的新 wb 中,希望由于 26.May 在第一次复制操作中切换到 26,5,它会再次以相同的方式粘贴 26,5 并且查找将工作正常,但是这次相同的复制代码将 26.May 粘贴为字符串(26.May 也在上部矩形中)而不是 26,5。

    如果有人可以帮助解决这个问题,我很感激,如果我错过了任何信息,请告诉我,因为这是我第一次提交问题,我可能会因为沮丧而错过了一些东西:)

  • 这是一个单元格格式问题。实际数据相同。 Excel 可以随心所欲地显示它。我会强制它为TEXT 格式,这样它就不会改变。您真的不想对数量字段使用DATE 格式。
  • 感谢您的评论。忘了提 Range().Text 也不能​​解决我的问题。正如我所提到的,因为它很少见并且出于视觉确认的目的,我不介意以某种方式将偶尔导出的数量值保留为日期。当然,如果它直接导出为 26.5 而不是 26.May 会更好,但我现在可以保持这种状态。此外,我注意到将有问题的单元格粘贴到查找工作簿中的单元格旁边也会得到相同的结果,这使我得出结论,这是源格式问题而不是目标。

标签: excel vba


【解决方案1】:

在粘贴之前将单元格格式化为文本。这将保留文本实际上是什么。它永远不会改变。这种可靠性正是您所寻求的。

pasteWB.Worksheets(1).Range("J2:J" & lastRow).NumberFormat = "@"

注意:如果您想将其保留为日期,您还可以将单元格格式化为日期以强制所有数字变为日期,但这对您的数据集没有意义。

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2019-07-23
    • 2015-07-28
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多