【问题标题】:Ltrim,Trim functions not working for removing extra leading spaces in VBALtrim,Trim 函数不能用于删除 VBA 中的额外前导空格
【发布时间】:2012-06-03 15:26:36
【问题描述】:

我有一部分代码:

If IsDate(cf1) Then
   cf1str = CStr(cf1)
   cf1str = Trim(cf1str)
   chk1 = Format(cf1, "dd-mm-yyyy hh:mm:ss")

   If cf1str <> chk1 Then
      MsgBox "message"
      Ws.Cells(i, c1).Select
      Selection.Activate
      Exit Sub
   End If
Else
   MsgBox ""
   Ws.Cells(i, c1).Select
   Selection.Activate
   Exit Sub
End If

我在这里要做的是,我想检查日期是否有效并且格式为“dd-mm-yyyy hh-mm-ss”。现在,当我将日期作为字符串进行比较时,我想确保没有由于前导或尾随空格而导致的不匹配。我试过ltrimtrimrtrim,但我发现列中有前导空格。结果,我收到一条错误消息,指出日期格式不正确。这会在代码用户之间造成混淆,因为错误是什么,即使他们看到单元格中的日期格式相同。我试图通过 Val() 函数将字符串更改为值然后检查它们来摆脱这种情况,但徒劳无功。有什么解决办法吗?

还有如何摆脱像\n 这样的不需要的字符,trim 可能无法根除?因为在一个单元格中,我甚至可以看到日期完全符合我想要的顺序,没有任何空格,它仍然显示错误消息。

【问题讨论】:

  • 为什么你认为CStr 会给你你想要的格式? CStr(date)Format(date, "general date") 相同。
  • 字符串比较只会造成混淆。看到这个例子的原因。如果您的单元格有“ 12/12/2012 00:00:00”,并且如果您在修剪后检查格式“dd-mm-yyyy hh:mm:ss”,那么它不匹配,因为“/”和“ -"
  • 感谢您的回复。我知道字符串比较会造成您提到的这种混乱。但这里的目的是严格保持格式为 "dd-mm-yyyy hh:mm:ss" ,这样,如果任何其他格式的日期出现在任何单元格中,它都会提示用户更改它。
  • 不确定这是否有帮助,但 excel TRIM (application.worksheetfunctions.trim) 和 VBA trim 是不同的函数,结果不同。

标签: vba excel


【解决方案1】:

不要比较字符串。比较日期。试试这个:

If IsDate(cf1) Then
   cf1str = CStr(cf1)
   cf2 = CDate(chk1)

   If cf1 <> cf2 Then
      MsgBox "message"
      Ws.Cells(i, c1).Select
      Selection.Activate
      Exit Sub
   End If
Else
   MsgBox ""
   Ws.Cells(i, c1).Select
   Selection.Activate
   Exit Sub
End If

【讨论】:

  • 感谢您的回复,我的目的是为单元格中的每个数据检查我想要的日期的确切格式,即 "dd-mm-yyyy hh:mm:ss" .比较日期将检查两个日期是否相同,但不会达到我的目的
【解决方案2】:

我想我明白了。 这正是我想要的:

For Each cell In Selection.Cells
    If cell.HasFormula = False Then
        str = Trim(CStr(cell))
        If Len(str) > 0 Then
            nAscii = Asc(Left(str, 1))
            If nAscii < 33 Or nAscii = 160 Then
                If Len(str) > 1 Then
                    str = Right(str, Len(str) - 1)
                Else
                    str = ""
                End If
            End If
        End If
        cell=str
    End If
Next

此代码检查每个字符串中的第一个字符,如果它不是简单的空格,则将其删除。小于 33 的 Ascii 字符都是不可见的字符,其行为类似于空格,不能通过 trim 或 ltrim 函数删除。这是我面临的确切问题。ascii 代码 160 用于 html 中的 &nbsp,如果直接从 html 文件中粘贴,通常会出现在值中,这正是我的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 2011-05-07
    • 1970-01-01
    • 2021-10-06
    • 2021-11-21
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多