如何在VBA Excel中检查和删除空间

时间:2019-01-25 01:54:29

标签: excel vba

我是VBA的新手,我在网上找到了此代码,可帮助我检查输入的内容是否为电子邮件地址,但不会删除多余的空格。我不知道如何修改代码以增加空间。

我试图像这样使用Trim->'emailAddr.Value = Trim(emailAddr.Value),但这给了我错误。

感谢任何人都能提供帮助。

Private Sub Worksheet_Change(ByVal Target As Range)

 For Each emailAddr In Range("D2:D100").Cells

     If emailAddr.Value <> "" And Evaluate("COUNTIF(" & emailAddr.Address & ",""*@*.*"")") <> 1 Then
        emailAddr.Font.Color = RGB(225, 0, 0)
    Else
        emailAddr.Font.Color = RGB(0, 0, 255)
        emailAddr.Value = Trim(emailAddr.Value)
   End If
 Next emailAddr
End Sub

2 个答案:

答案 0 :(得分:0)

有两种方法,一种可以将两种方法结合起来以获取所需的修剪后的琴弦:

  1. 替换所有空格。由于电子邮件地址的任何位置(末尾或中间)都不能有空格。
  2. 使用正则表达式删除所有空白的自定义UDF。

emailAddr.Value = Replace(RemoveWhiteSpace(emailAddr.Value)," ",vbNullString)
emailAddr.Value = Replace(emailAddr.Value,Chr(9),vbNullString)

'Add a reference to Microsoft VBScript Regular Expressions 5.5
Public Function RemoveWhiteSpace(target As String) As String
    With New RegExp
        .Pattern = "\s"
        .MultiLine = True
        .Global = True
        RemoveWhiteSpace = .Replace(target, vbNullString)
    End With
End Function

答案 1 :(得分:0)

下面是对我有用的代码。

Private Sub Worksheet_Change(ByVal Target As Range)

    For Each emailAddr In Range("D2:D3").Cells

    Application.EnableEvents = False
    emailAddr.Value = Replace(emailAddr.Value, " ", "")
    Application.EnableEvents = True

    If emailAddr.Value <> "" And Evaluate("COUNTIF(" & emailAddr.Address & ",""*@*.*"")") <> 1 Then
        emailAddr.Font.Color = RGB(225, 0, 0)
    Else
        emailAddr.Font.Color = RGB(0, 0, 255)
    End If

  Next emailAddr
End Sub