就像我说你的代码有效。下面是一个例子
Private Sub txtTimeUnit_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If txtStartDate.Text = vbNullString Then
txtTimeUnit.Text = vbNullString
txtStartDate.SetFocus
Exit Sub
End If
End Sub
它不会工作,唯一的办法就是当有代码的另一块被设置Cancel = True
。例如
Private Sub txtTimeUnit_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsError(Application.Match(txtTimeUnit.Text, Range("intTable[Time Unit]"), 0)) Then
Cancel = True
End If
If txtStartDate.Text = vbNullString Then
txtTimeUnit.Text = vbNullString
txtStartDate.SetFocus
Exit Sub
End If
End Sub
为了防止此类错误,你可以使用一个Boolean
可变
Dim boolOnce As Boolean
Private Sub txtTimeUnit_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If boolOnce = False Then
boolOnce = True
If IsError(Application.Match(txtTimeUnit.Text, Range("intTable[Time Unit]"), 0)) Then
Cancel = True
End If
Else
boolOnce = False
End If
If txtStartDate.Text = vbNullString Then
txtTimeUnit.Text = vbNullString
txtStartDate.SetFocus
Exit Sub
End If
End Sub
尝试'txtTimeUnit.Text = vbNullString' - 你可以不设置控制本身'vbNulLString'。 –
你的回答是不正确的。 'txtTimeUnit = vbnullstring'是真实的代码并且可以工作。问题出在'txtStartDate.SetFocus'行,因此在调试错误后突出显示。如果我在该行之前移动Exit Sub,宏就会工作并且没有错误发生,但是我需要将焦点设置在txtStartDate文本框上。 – mgae2m
您对Siddarth的回答在您的其他问题上的评论(https://stackoverflow.com/questions/44871013/how-can-i-pass-cursor-and-set-focus-on-a-userform-textbox-in-vba )表示'txtTimeUnit = vbnullstring'是问题行。你也可以说注释掉那行代码就可以工作 - 所以从你的问题来看,这就是问题所在。 –