13.11.2012

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

Formeln auf einer UserForm in einer TextBox darstellen...

Formeln auf einer UserForm in einer TextBox anzeigen. Z. B. "Formula", "FormulaLocal"... und wie muss die Formel in VBA ...