Kein Control aktiv - wie abfangen?

Liebe ExpertInnen,

wie kriege ich raus, ob überhaupt ein Control im Screen aktiv ist? Ich möchte prüfen, ob ein HelpContextId für ein Control vorhanden ist. Mache ich das mit einem Formular, auf dem je nach Inhalt kein Control zu sehen ist, erzeugt VBA beim Bezug auf Screen.ActiveControl.Properties(„HelpcontextId“) den Fehler 2474. Der lässt sich mit einer OnError natürlich abfangen, lieber wäre mir aber, wenn es dazu erst gar nicht käme.

Die Controls kriege ich zu packen, nur halt keine passende Eigenschaft dazu.

Gruß Ralf

Hallo, Ralf!

wie kriege ich raus, ob überhaupt ein Control im Screen aktiv
ist? Ich möchte prüfen, ob ein HelpContextId für ein Control
vorhanden ist. Mache ich das mit einem Formular, auf dem je
nach Inhalt kein Control zu sehen ist, erzeugt VBA beim Bezug
auf Screen.ActiveControl.Properties(„HelpcontextId“)
den Fehler 2474. Der lässt sich mit einer OnError natürlich
abfangen, lieber wäre mir aber, wenn es dazu erst gar nicht
käme.

Das Abfangen des Fehlers dürfte das einfachste sein. Alles andere ist ziemliches Herumgebastel. Es ist manchmal deutlich einfacher und vor allem schneller, einen Fehler zu provozieren, als ihn auf Teufel-komm-raus zu vermeiden.

Die Controls kriege ich zu packen, nur halt keine passende
Eigenschaft dazu.

Wie meinst Du das jetzt?

Gruß, Manfred

Moin, Manfred,

Es ist manchmal deutlich
einfacher und vor allem schneller, einen Fehler zu
provozieren, als ihn auf Teufel-komm-raus zu vermeiden.

schtümmt, so habe ich es ja auch gelöst. Ich schwimme allerdings ein wenig mit diesem ErrorOn - muss mir die Auswirkungen nochmal genauer anschauen.

Die Controls kriege ich zu packen, nur halt keine passende
Eigenschaft dazu.

Wie meinst Du das jetzt?

Wenn ich so eine Eigenschaft nicht finde, dann gehe ich erstmal davon aus, dass es sie trotzdem gibt :smile:

Die Controls lassen sich ja recht einfach finden, nur keine Aussage darüber, ob sie aktiv sind. Bei mir ist das ein Formblatt, auf dem Tabellensätze nur zum Löschen angezeigt werden, also kein Hinzufügen möglich ist. Wenn die Tabelle leer ist, ist eben nichts aktiv.

Gruß Ralf

Hi, Ralf!

Es ist manchmal deutlich
einfacher und vor allem schneller, einen Fehler zu
provozieren, als ihn auf Teufel-komm-raus zu vermeiden.

schtümmt, so habe ich es ja auch gelöst. Ich schwimme
allerdings ein wenig mit diesem ErrorOn - muss mir die
Auswirkungen nochmal genauer anschauen.

Ich haue mir in jede noch so kleine Funktion zu Beginn folgenden Prozedurrumpf rein:

Sub DummyFunktion()
Const cstrProcName = "DummyFunktion" 'ErrorHandler:blush:$N=FindFiles
'--------------------
On Error GoTo ErrorHandler

 ' z. B. was löschen und neu anlegen
 Kill "C:\Temp\Test.txt"
 ' ...

' Fehlerbehandlungsblock hinzugefügt vom Fehlerbehandlungsroutinen-Add-In. Bearbeiten Sie diesen Codeabschnitt NICHT.
'--------------------
ErrorHandler:
 Select Case Err.Number
 Case 0
 case 53
 ' Fehler: Datei nicht gefunden: Da ich löschen will, ist das egal:
 resume next
 Case Else
 MsgBox "Fehler: " & vbTab & Err.Number & "-" & Err.Description & vbCrLf \_
 & "Modul:" & vbTab & mcstrModName & vbCrLf \_
 & "Funktion:" & vbTab & cstrProcName, vbExclamation + vbOKOnly, "Fehler!"
 Resume ErrorHandler
 End Select
End Sub

Alle vorhersehbaren und entsprechend behandelbaren Fehler kommen in die Select Case-Anweisung. Meistens gehe ich da mit einem Resume Next zurück. Nur die unvorhergesehenen Probleme landen wenigstens noch im Case Else-Teil, geben eine Messagebox aus und beenden die Ausführung der Prozedur. mcstrModName ist dabei in jedem Modul die Konstante, die den Modulnamen beinhaltet.

Die Controls kriege ich zu packen, nur halt keine passende
Eigenschaft dazu.

Wie meinst Du das jetzt?

Wenn ich so eine Eigenschaft nicht finde, dann gehe ich
erstmal davon aus, dass es sie trotzdem gibt :smile:

Hmmm. Wenn ich eine Eigenschaft nicht finde, gibt’s die auch nicht, oder ich kann nicht auf sie zugreifen. myControl.Properties(„GipsDas“) liefert z. B. den Fehler „Eigenschaft nicht vorhanden“ (oder was weiß ich, wie die genau heißt)…

Die Controls lassen sich ja recht einfach finden, nur keine
Aussage darüber, ob sie aktiv sind. Bei mir ist das ein
Formblatt, auf dem Tabellensätze nur zum Löschen angezeigt
werden, also kein Hinzufügen möglich ist. Wenn die Tabelle
leer ist, ist eben nichts aktiv.

Das solltest Du ja rausbekommen, wenn RecordCount Deiner Formular-Datenquelle 0 ist.

Gruß, Manfred

1 Like

Moin, Manfred,

besternten Dank für den ErrorHandler.

Gruß Ralf