【问题标题】:TRIM aligns dates to the leftTRIM 将日期向左对齐
【发布时间】:2021-05-31 11:23:09
【问题描述】:

问题

在写这篇文章时,我意识到问题所在并修复了它。但是,在花了太多时间在这之后,我仍然想知道这是否是解决此问题的最佳方法。

在工作表中,我将宏应用到我有一列,其中一些单元格包含文本,其他单元格包含日期 (DD.MM.YYYY)。 Excel 自动将文本左对齐,日期右对齐。

我遇到了有时在此列中有尾随空格的问题。所以我使用TRIM 的for 循环来确保没有前导或尾随空格。它起作用了,但是所有日期现在都对齐到左侧,而之前它们对齐到右侧。当我双击其中一个单元格然后选择另一个单元格时,即使我没有对单元格进行任何操作,日期也会立即回到右侧(这是我想要的)。


修复

我花了很长时间才意识到(或仔细阅读)TRIM 是用于字符串的。

  1. 我在运行宏之前注意到:日期自动向右对齐,但在功能区的“对齐”中,没有选择水平对齐选项。如果我手动执行此操作并将日期向右对齐,然后运行宏,则日期将保持在右侧。

  2. 在运行宏之前检查VarType 时,我得到8 用于带有文本的单元格,7 用于带有日期的单元格,正如预期的那样。然而,在运行宏之后,我得到了8(意思是字符串)。双击带有日期的单元格并取消选择后,VarType 再次为 7。在 Excel 功能区中,它总是说它是一个日期(在宏之前和之后),所以 Excel 似乎没有显示 VBA 告诉我的内容。

  3. 我现在的解决方法是:在应用TRIM 之前,我的宏会检查单元格的VarType,如果是7,它什么也不做,因为尾随空格只是用户输入文本的问题。 (或者,我可以将日期对齐并让TRIM 遍历所有单元格)

这很好,但是有更好的方法吗?在约会时使用TRIM 有可能搞砸一些事情吗?我正在尝试从中学习一些东西。


代码

为了更好的衡量,我的示例代码,包括修复。

Sub Test()
    Dim ws          As Worksheet
    Dim searchRng   As Range
    Dim cell        As Variant
    
    Set ws = ActiveSheet
    
    With ws
        Set searchRng = .Range("A1:A100")
        For Each cell In searchRng
            If VarType(cell) = 7 Then
                'Date -> Do Nothing
            Else
                cell.Value = WorksheetFunction.Trim(cell.Value)
            End If
            
        Next cell
    End With
End Sub

【问题讨论】:

  • 你说 当我双击其中一个单元格然后选择另一个单元格时,日期会快速回到右侧那是因为在修剪之后,单元格包含的文本只是看起来像约会。当您开始并完成编辑(即使没有实际更改任何内容)时,Excel 会帮助将字符串识别为日期格式并将其转换为日期。正确的解决方法是在您的代码cell.Value = CDate(WorksheetFunction.Trim(cell.Value)) 中自己进行转换

标签: excel vba trim


【解决方案1】:

对于你的问题,我做了一些测试,和你的结果有很大的不同,是不是因为excel版本的原因?

我在A1 中有一个数据,在日期前面加上空格,如下所示:

通过执行下面的函数,第一个typename是string,但是去掉空格后它最终是typenamedate,我认为没有必要检查你的解决方案的类型?

Sub tt()

Debug.Print TypeName(Sheet1.Range("A1").Value)

Sheet1.Range("A1").Value = Trim(Sheet1.Range("A1").Value)

Debug.Print TypeName(Sheet1.Range("A1").Value)

End Sub

所以这意味着你的代码可以在循环中被简化如下并且仍然产生相同的结果,它是否正确对齐并不重要:

For Each cell In searchRng
    cell.Value = Trim(cell.Value)
Next cell

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2017-08-20
    • 2023-03-11
    • 2017-12-08
    • 1970-01-01
    • 2012-01-27
    • 2012-08-12
    • 2013-03-30
    相关资源
    最近更新 更多