Tag Archives: Fehler abfangen

Als Kind hatte ich kein Smartphone oder Tablett. Ich habe die Cornflakes-Packung beim Frühstück gelesen.

Hallo Herr Martin

Ich hoffe Sie sind gut ins neue Jahr gekommen.

Wir hatten schon einmal kontakt aufgenommen.

Folgende  Meldungen bekomme:

Nach dem Debuggen bekomme ich diese Meldung:


Der Urheber behauptet dass das korrekt ist und keinen Fehler darstellt.
 
Ich würde mich herzlich freuen, wenn wir  kurz miteinander sprechen können.
 
Schon jetzt herzlichen Dank.
 
Mit freundlichen Grüßen

####

Hallo Herr P.,

welchen Wert hat denn „MenueName“? Wenn Sie mit der Maus über diesen Variablennamen beim Debuggen fahren – was wird denn angezeigt? Und was bei „SubMenueName“?

Umgekehrt: Arbeiten Sie noch mit Menüs? Die sind doch seit Excel 2007 verschwunden? Ich verwende seit vielen Jahres das Ribbon und füge dort Symbole ein.

Liebe Grüße Rene Martin

####

Herr Martin,

erstmal Danke für Ihre Rückmeldung,

was Sie schreiben sind für mich Böhmische Dörfer.

Sorry, dass sind zu hohe Ansprüche für mich.

Ich habe Ihnen die VBA kopiert.

‚~~Begin~~#################################################################################

Sub Menue_Erstellen_ZV()

    Dim MB As Object, MWMMenue As Object, Befehl As Object

    Set MB = CommandBars.ActiveMenuBar

    If (Menüpunkt_vorhanden(MenueName)) Then

        If (Menüeintrag_vorhanden(MenueName, SubMenueName)) Then

            Menueeintrag_loeschen_ZV

        End If

        Set MWMMenue = MB.Controls(MenueName)

        Set Befehl = MWMMenue.Controls.Add(Type:=msoControlButton, ID:=1)

        With Befehl

            .Caption = SubMenueName

            .OnAction = „ZV_ZellenVerbinden“

        End With

    Else

        Set MWMMenue = MB.Controls.Add(Type:=msoControlPopup, Temporary:=True)

        MWMMenue.Caption = MenueName

        Set Befehl = MWMMenue.Controls.Add(Type:=msoControlButton, ID:=1)

        With Befehl

            .Caption = SubMenueName

            .OnAction = „ZV_ZellenVerbinden“

        End With

    End If

End Sub

‚~~~END~~~#################################################################################

‚~~Begin~~#################################################################################

Sub Menue_Loeschen_ZV()

    On Error Resume Next

    CommandBars.ActiveMenuBar.Controls(MenueName).Delete

End Sub

‚~~~END~~~#################################################################################

‚~~Begin~~#################################################################################

Function Menüpunkt_vorhanden(Bezeichnung) As Boolean

    Menüpunkt_vorhanden = False

    Dim MNU As CommandBarControl

    For Each MNU In Application.CommandBars _

      („Worksheet Menu Bar“).Controls

        If UCase(MNU.Caption) = UCase(Bezeichnung) Then

            Menüpunkt_vorhanden = True

            Exit Function

        End If

    Next MNU

End Function

‚~~~END~~~#################################################################################

‚~~Begin~~#################################################################################

Function Menüeintrag_vorhanden(SubMenü, Bezeichnung) As Boolean

    Menüeintrag_vorhanden = False

    Dim MNU As CommandBarControl

    For Each MNU In Application.CommandBars _

      („Worksheet Menu Bar“).Controls(SubMenü).Controls

        If UCase(MNU.Caption) = UCase(Bezeichnung) Then

            Menüeintrag_vorhanden = True

            Exit Function

        End If

    Next MNU

End Function

‚~~~END~~~#################################################################################

‚~~Begin~~#################################################################################

‚Löscht den Eintrag SubMenueName im Menü „MWM“

Sub Menueeintrag_loeschen_ZV()

     CommandBars(„Worksheet Menu Bar“). _

       Controls(MenueName).Controls(SubMenueName).Delete

End Sub

‚~~~END~~~#################################################################################

Schon jetzt herzlichen Dank für Ihre Rückmeldung.

####

Hallo Herr P.,

danke für den Code. Mir fehlt allerdings immer noch ein Befehl: ein anderes Makro ruft dieses Makros auf und löscht das Symbol in der Symbolleiste. Ich weiß nicht welches, weil ich diese Variable nicht „sehe“.

Im Makro

Sub Menue_Loeschen_ZV()

lautet die erste Zeile

On Error Resume Next

also auf Deutsch: sollte ich – das Makro – das Symbol nicht löschen können (Controls(MenueName).Delete) – beispielsweise weil es schon gelöscht wurde … na: dann mach halt gar nichts! Auch keine Fehlermeldung! Ist völlig okay so!

Jedoch im Makro

Sub Menueeintrag_loeschen_ZV()

fehlt diese Zeile.

Tipp: Fügen sie nach der Sub-Zeile einfach die On-Error-Zeile ein (wurde wahrscheinlich vergessen), also so:

Sub Menueeintrag_loeschen_ZV()

On Error Resume Next

CommandBars(„Worksheet Menu Bar“). _

       Controls(MenueName).Controls(SubMenueName).Delete

Probieren Sie es mal.

Klappt das?

Liebe Grüße

Rene Martin

Nach zwei Stunden Babysitten glaube ich, dass ich doch keine Kinder, sondern lieber etwas Harmloseres möchte. Krokodile zum Beispiel. Oder Löwen.

Hallo Excel-Meister

ich arbeite an einem VBA – Projekt, dass aus Power BI Dateien die Metadaten rauslesen soll.

Das Auslesen geschieht über Power Query (what else….), aber ich muss noch ein paar Prüfungen mit VBA erstellen und insbesondere die Power Query Abfragen on the fly erstellen. Letzteres geht problemlos.

Der Ablauf:

  1. Prüfe, ob User die pbix geöffnet hat.
  2. Falls nicht, bitte freundlich darauf aufmerksam machen
  3. Falls nein, Abbruch – falls ja, pbix öffnen.

Bis dahin klappt alles.

Nun kommt der Punkt, wo der Benutzer sich gegenüber der Power BI Datei authentifizieren muss, nachdem er ja gesagt hat.

falls er aber den Dialog hier abbricht (…..DAU…….), kommt eine „schöne“ Meldung:

Nun meine Frage:

Wie kann ich hier meine eigene Meldung einbauen und vor allem, wie fange ich das ab?

Bin schon voller Zweifel…..

Merci, lieber René für deine Geduld mit mir

Freundliche Grüsse Hans Peter

########################################

die unwissenden erleuchten sich selber

habs gefunden. nach Drücken von „Senden“ fiel es mir wieder ein, da stand was im Buch von René

ich danke dir!

Hier der Code, falls es dich interessiert.

Sub GetData()

‚XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

‚ Code erstellt durch: Pfister BI Consulting GmbH

‚ Zweck: Holt Metadaten aus der Power BI Datei

‚ Erstelldatum: 8.3.2021

‚ Aenderungsdatum:

‚XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

‚Testen, ob pbix Datei geöffnet ist. Falls nicht, Mesagebox und fragen, ob sie geöffnet werden soll. Fall nicht, Abbruch

    If Dateigeoeffnet(Range(„Dateipfad_PBIX_Original“)) = False Then

        If MsgBox(„Die Datei muss geöffnet sein. “ & Chr(10) & “ Soll die Datei geöffnet werden?“, vbYesNo, „Power BI Datei öffnen?“) = vbNo Then

            Exit Sub

            Else: Call Open_PBIX

                Application.Wait (Now + TimeValue(„0:00:10“))

            End If

   End If

’notwendige Abfragen aktualisieren

Abfragen_starten:

On Error GoTo ErrHandler

    ActiveWorkbook.Connections(„Abfrage – Tabellen“).Refresh           ‚Teil Abfrage – “ muss unbedingt vermerkt sein!

    ActiveWorkbook.Connections(„Abfrage – Memory Usage Tabellen“).Refresh           ‚Teil Abfrage – “ muss unbedingt vermerkt sein!

    ActiveWorkbook.Connections(„Abfrage – Tabellenliste“).Refresh           ‚Teil Abfrage – “ muss unbedingt vermerkt sein!

    ActiveWorkbook.Connections(„Abfrage – Liste nicht geladene Queries“).Refresh           ‚Teil Abfrage – “ muss unbedingt vermerkt sein!

    ActiveWorkbook.Connections(„Abfrage – Abfragen – nicht geladen“).Refresh           ‚Teil Abfrage – “ muss unbedingt vermerkt sein!

  Call Listen_befuellen

ErrHandler:

    ‚Fehler No. 1004 abfangen

    If Err = 1004 Then

        If MsgBox(„Soll der Prozess abgebrochen werden?“, vbYesNo, „Bitte Identifikation vornehmen“) = vbYes Then

            Exit Sub

        ’sonst Abfrage wieder aufnehmen

            Else: Resume Abfragen_starten

        End If

    End If

End Sub

Gruss Hp