【问题标题】:Excel Userform IF AND statementExcel Userform IF AND 语句不起作用
【发布时间】:2021-01-12 04:59:24
【问题描述】:

我正在尝试在用户表单中创建 IF/AND 语句,但失败了。我希望能够将相同的姓氏和不同的名字添加到动态列表中,但我当前的代码(如下)将其捕获为重复值。我可以添加一个完全唯一的名字和姓氏,而不会遇到任何问题。
在下面的代码中,我从 TextBox2/Num2 中提取名字,从 TextBox3/Num3 中提取姓氏

例如: 将 John Doe 添加到已包含 Jane Doe 的列表中将被视为姓氏的重复项。
Current State of my worksheet

Dim Num1 As Long
Dim Num2 As Long
Dim Num3 As Long

On Error Resume Next
Num1 = Application.WorksheetFunction.Match(Me.TextBox1.Value, ws.Range("A2:A500000"), 0)
Num2 = Application.WorksheetFunction.Match(Me.TextBox2.Value, ws.Range("B2:B500000"), 0)
Num3 = Application.WorksheetFunction.Match(Me.TextBox3.Value, ws.Range("C2:C500000"), 0)
On Error GoTo 0

If Num1 > 0 Then
    MsgBox "Error! Duplicate EID detected", , "Duplicate Detected"
    Exit Sub
End If



If Num2 > 0 And Num3 > 0 Then
    MsgBox "Error! Duplicate NAME detected", , "Duplicate Detected"
    Exit Sub
End If

【问题讨论】:

  • 你可以用WorksheetFunction.CountIfs代替Match
  • 或者你可以写If Num2 <> 0 And Num3 <> 0 Then
  • @ScottHoltzman - 但问题是 num2 和 num3 可能不一样...即John 在一行上匹配,Doe 在另一行上匹配。
  • @BigBen - 好点。在那种情况下If Num2 > 0 And (Num2 = Num3) Then
  • @BigBen 这开启了添加完全重复条目的可能性。除非我输入错误。我刚刚用.CountIfs替换了.Match

标签: excel vba if-statement userform


【解决方案1】:

使用WorksheetFunction.CountIfs 代替Match 并检查结果是否大于0。这将搜索同一行中名字和姓氏的组合

Dim firstName As String
firstName = Me.TextBox2.Value

Dim lastName As String
lastName = Me.TextBox3.Value

If WorksheetFunction.CountIfs(ws.Range("B:B"), firstName, ws.Range("C:C"), lastName) > 0 Then
    MsgBox "Error! Duplicate NAME detected", , "Duplicate Detected"
    Exit Sub
End If

【讨论】:

  • 天哪!我知道这很可能是一个超级简单的解决方法,但我对 VBA 还是很陌生,所以这很有帮助。非常感谢您的帮助
  • @Kaz-99- 这是一个很好的解决方案。如果确实解决了您的问题,请考虑将其标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 2012-07-16
相关资源
最近更新 更多