TRIM 将日期左对齐

问题描述 投票:0回答:2

问题

在写这篇文章时,我意识到问题是什么并解决了它。然而,在花了太多时间之后,我仍然想知道这是否是最好的方法。

在工作表中,我应用了一个宏,其中有一列,其中一些单元格包含文本,其他单元格包含日期(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 vba trim
2个回答
0
投票

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

我在

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

通过执行以下函数,第一个类型名称是

string
,但是删除空格后,它最终变成类型名称
date
,我认为没有必要检查解决方案中的类型?

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

0
投票

'功能 ubah 文本 ke tanggal 函数 dtUbahTgl(ByVal sTgl As String) 作为日期 '格式 sTgl harus 日/月/年 带床单(“Utilitas”) .Range("C1").Formula = "=DATE(" & Right(sTgl, 4) & "," & Mid(sTgl, 4, 2) & "," & Left(sTgl, 2) & ")" dtUbahTgl = .Range("C1").Value .Range("C1").Value = 日期 结束于 结束功能

© www.soinside.com 2019 - 2024. All rights reserved.