0

私はコードの一部を持っています:

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」の形式であるかどうかを確認したいということです。日付を文字列として比較しているので、先頭または末尾のスペースによる不一致がないことを確認したいと思います。ltrimtrim、で試しましrtrimたが、列の先頭にスペースがあることがわかりました。その結果、日付の形式が正しくないというエラー メッセージが表示されます。これは、セル内の日付形式が同じであることがわかっていても、コード ユーザーの間でエラーが何であるかという混乱を引き起こしています。Val()文字列を関数ごとに値に変更してからチェックすることでこれを取り除こうとしましたが、無駄でした。解決策はありますか?

また、根絶できない可能性\nのあるのような不要な文字を取り除く方法は? trim1つのセルでは、日付がスペースなしで正確に正しい順序になっていることがわかりますが、それでもエラーメッセージが表示されます。

4

2 に答える 2

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ファイルから直接貼り付けた場合、値が表示されることがよくありますが、これはまさに私の場合でした。

于 2012-06-04T01:41:50.287 に答える
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
于 2012-06-03T15:51:09.540 に答える