Hi Stefan,
es gibt noch eine Möglichkeit. Probiers mal so:
Code in Userform1
Dim LastControl As MSForms.Control
Dim tbxcoll As New Collection
Private Sub CommandButton1_Click()
CheckForExit
End Sub
Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
CheckForExit
End Sub
Private Sub UserForm_Activate()
CheckForExit
End Sub
Private Sub UserForm_Initialize()
Dim txt As MSForms.TextBox
Dim i As Integer
' Beispiel für 2 Textfelder
For i = 1 To 2 ' Oder die gewünschte Anzahl von TextBoxen
' Dynamische TextBox erstellen
Set txt = Me.Controls.Add("Forms.TextBox.1", "TxtKanalEckig" & i, True)
' TextBox-Eigenschaften festlegen
With txt
.Left = 10
.Top = 30 * i
.Width = 100
.Height = 20
.Text = "TextBox " & i
.Tag = "TextBox" & i ' Zum Identifizieren der TextBox
End With
tbxcoll.Add New myTextbox
Set tbxcoll(tbxcoll.Count).tbx = txt
Next i
End Sub
Public Sub CheckForExit()
If Not LastControl Is Nothing Then
If LastControl.Name <> Me.ActiveControl.Name Then MsgBox LastControl.Name & " wurde verlassen"
End If
Set LastControl = Me.ActiveControl
End Sub
Code in einem neuen Klassenmodul namens myTextbox
Public WithEvents tbx As MSForms.TextBox
Private Sub tbx_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm1.CheckForExit
End Sub
Private Sub tbx_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
UserForm1.CheckForExit
End Sub
Du müsstest quasi für jedes Control, das keine Textbox ist, ein Keyup-Ereignis auslösen, das die Prozedur CheckForExit aufruft.
Gruß Mr. K.
|