【问题标题】:How do I avoid data formatting when replacing text VBA?替换文本 VBA 时如何避免数据格式化?
【发布时间】:2020-05-29 11:39:51
【问题描述】:

我是新用户! 我使用 VBA 已经有一段时间了,但我现在需要您的帮助。

我写了一个宏,除此之外,它应该查找和替换列中的文本。 最初,该列的文字是这样写的:“24.12.2019”。 我试图做的是找到“。”并将其替换为“/”。

但是,通过这样做,VBA 会尝试将其转换为日期(ENG 格式 mm/dd/yyyy)。 显然,当一天大于 12 时,它会将其保留为文本。

好吧,我想保持格式为“dd/mm/yyyy”,避免VBA转换范围。

"SearchFormat:=False, ReplaceFormat:=False" 不行)

【问题讨论】:

  • 您可以在字符串前面添加' 以将其保留为文本
  • 感谢您的回答!相信我,我试过了,但没用
  • edit your question提供您代码的相关部分
  • 也许你的代码更完整的例子,会帮助我们回答你的问题。
  • 您更喜欢 dd/mm/yy 日期格式而不是带有“/”的文本吗?我已经编写了代码来实现这一点,你只需要将它应用到你的代码上。

标签: excel vba


【解决方案1】:

如果您的目标是让 excel 将数据识别为日期,但采用 DD/MM/YY 格式,以下是您的操作方法。只需更改选择 Columns("A:A") 部分和目标 `Range("A1")

Columns("A:A").TextToColumns Destination:=Range("A1"), _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, _
    Semicolon:=False, _
    Comma:=False, _
    Space:=False, _
    Other:=False, _
    FieldInfo:=Array(1, 4), _
    TrailingMinusNumbers:=True

Columns("A:A").NumberFormat = "dd/mm/yy;@" ' or "dd\/mm\/yy;@" depending on region

【讨论】:

  • 谢谢你,马克,我会尽快尝试并告诉你。
  • @LucaA88 澄清这一点不会将该列保留为文本。它会将其转换为 dd/mm/yy 日期格式。
  • 这就是它应该的做法。日期不是文本。将日期格式化/处理为文本会让您头疼。
  • NumberFormat = "dd/mm/yy;@" 将根据区域设置格式化日期。如果日期以'"dd.mm.yy"`的格式显示,我认为这种格式的应用将以相同的方式显示。我不知道这是否是他想要的。无论如何,他会在他宣布的测试后澄清这个问题......
  • @FaneDuru 如果有问题,我将添加一个关于如何获取格式代码并相应修改代码的演练。
【解决方案2】:

为了强制 Excel 将文本保留在您的列中,您必须在替换现有文本之前运行这段代码:

Dim sh As Worksheet
   Set sh = ActiveSheet 'use here your sheet
   sh.Range("E:E").TextToColumns Destination:=sh.Range("E1"), FieldInfo:=Array(1, 2)

【讨论】:

  • 谢谢 FaneDuru,我会尽快尝试并通知您。
  • 注意在单元格中包含一些值,以便稍后替换内容并保持格式为文本,独立于您的输入...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多