【发布时间】:2015-07-11 10:33:57
【问题描述】:
所以我有一个在工作簿打开事件中打开 userform1 的 excel 工作簿。
一旦在 userform1 上满足某些条件,它就会调用一个加载并显示 userform2 的过程。 Userform2 有一个标签、一个文本框和一个按钮。我遇到的这个问题是 userform2 上的文本框的事件并没有全部正确触发。 KeyUp 和 KeyDown 事件按预期触发,但不会调用 Change 和 AfterUpdate 事件。
我已经能够在另一个大大简化的工作簿中复制该行为。如果您在 userform1 的文本框中键入或粘贴长度超过 7 个字符的文本字符串,则会加载 userform2。所需的行为是在 userform2 的文本框中键入一个 3 位数的数值,然后从 userform1 调用一个 sub。这永远不会发生。有没有其他人见过这种行为?你是怎么解决的?
USERFORM1:(请原谅 Ascii 艺术,显然我没有足够的声誉来发布图像):/
Label1: [ Textbox1 ]
Label2:
[ CommandButton1 ]
Option Explicit
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub TextBox1_Change()
If Me.TextBox1.TextLength >= 7 Then
Load UserForm2
UserForm2.Label1.Caption = "Value for " & Me.TextBox1.Text & "?"
UserForm2.Show
End If
End Sub
Public Sub Form2(data As Variant)
On Error GoTo eh
Me.Label2.Caption = Me.Label2.Caption & vbCrLf & Me.TextBox1.Text & vbTab & CStr(CLng(data))
eh:
If Err.Number = 13 Then
MsgBox "Please input a #"
UserForm2.TextBox1.SetFocus
ElseIf Err.Number = 0 Then
Unload UserForm2
End If
End Sub
用户表单2:
label1: [ Textbox1 ]
[ CommandButton1 ]
Option Explicit
Private Sub CommandButton1_Click()
Call UserForm1.Form2(Me.TextBox1.Text)
End Sub
Private Sub TextBox1_Change()
'This event never fires
If Me.TextBox1.TextLength >= 3 Then
Call UserForm1.Form2(Me.TextBox1.Text)
Else
Debug.Print "here"
End If
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'This event fires
Debug.Print KeyCode
End Sub
【问题讨论】:
-
乍得,我已经复制了您的问题,并在下面解决了问题