我有一部分代码:
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”。现在,当我将日期作为字符串进行比较时,我想确保由于前导或尾随空格而没有不匹配。我尝试使用ltrim
,trim
,rtrim
,但我发现列中有前导空格。因此,我收到一条错误消息,指出日期格式不正确。这会在代码用户之间产生混淆,即错误是什么,即使他们在单元格中看到日期格式相同。我试图通过Val()
函数将字符串更改为值然后检查它们来摆脱这种情况,但是徒劳无功。任何解决方案?
另外如何摆脱\n
trim
可能无法消除的不需要的字符?因为在一个单元格中,我看到即使日期完全按照我想要的顺序,没有任何空格,仍然显示错误信息。
答案 0 :(得分:0)
不要比较字符串。比较日期。试试这个:
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
答案 1 :(得分:0)
我想我明白了。 这正是我想要的:
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中,如果直接从html文件粘贴,它通常会出现在值中,这正是我的情况。