Aktives Control in UserForm andere Farbe - API - Timer...

Frage: In meiner UserForm sind einige TextBoxen bzw. ComboBoxen. Die gerade aktive soll eine andere Farbe erhalten. CommandButton sollen die Farbe nicht ändern. Ich möchte nun nicht jedes Enter- bzw. Exitereignis einzeln für jedes Control angeben. Wie geht das?

Bemerkung: Über Klassen geht das nicht, da nicht alle Ereignisse zur Verfügung stehen (unter anderem auch das Enter- bzw. Exitereignis).

Hier noch eine Beispieldatei: Aktives Control in UserForm andere Farbe - API - Timer...

Code gehört in ein allgemeines Modul (Modul1):

Option Explicit
Option Private Module
Private Declare Function KillTimer Lib "user32.dll" _
    (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function SetTimer Lib "user32.dll" _
    (ByVal hWnd As Long, ByVal nIDEvent As Long, _
    ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" _
    Alias "FindWindowA" (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Const EXUSERFORM = "ThunderDFrame"
Private hWnd As Long
'-------------------------------------------------------------------------- 
' Module    : Modul1 
' Procedure : StartTimer 
' Author    : Case (Ralf Stolzenburg) 
' Date      : 13.11.2012 
' Purpose   : Aktives Control in UserForm andere Farbe - API - Timer... 
'-------------------------------------------------------------------------- 
Public Sub StartTimer()
    hWnd = FindWindow(EXUSERFORM, UserForm1.Caption)
    SetTimer hWnd, 0&, 100&, AddressOf ControlTimer
End Sub
Sub StopTimer()
    KillTimer hWnd, 0&
End Sub
Private Sub ControlTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
    ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    On Error Resume Next
    Dim objControl As Control
    For Each objControl In UserForm1.Controls
        If TypeName(objControl) <> "CommandButton" Then
            objControl.BackColor = &H80FF80
        Else
            UserForm1.ActiveControl.BackColor = &H80000005
        End If
    Next objControl
End Sub

Code gehört in ein allgemeines Modul (Modul2):

Option Explicit
Public Sub Show_UF()
    UserForm1.Show 0
End Sub

Code gehört in das Modul der UserForm:

Option Explicit
'-------------------------------------------------------------------------- 
' Module    : UserForm1 
' Procedure : UserForm_Activate 
' Author    : Case (Ralf Stolzenburg) 
' Date      : 13.11.2012 
' Purpose   : Aktives Control in UserForm andere Farbe... 
'-------------------------------------------------------------------------- 
Private Sub UserForm_Activate()
    CommandButton1.TabStop = False
    Call StartTimer
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Call StopTimer
End Sub
Private Sub CommandButton1_Click()
    Unload Me
End Sub

Beliebte Posts aus diesem Blog

Formeln - auch Array - per VBA eintragen...

Alle Dateien eines Ordners - Optional mit Unterordner

Excel -> Word in Textmarken (Bookmarks)...