Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Codeausführung unterbrechen/fortsetzen

Forumthread: VBA Codeausführung unterbrechen/fortsetzen

VBA Codeausführung unterbrechen/fortsetzen
23.09.2016 10:39:48
Hannes
Guten Tag,
vielen Dank für alle Tips und Tricks die ich bisher als "Leser" dem Forum entnommen habe :)
Mein erster Beitrag, mein erstes Problem:
Ich habe einen VBA Code erstellt der die manuell gefilterten Daten von Solaranlagen (aus einer Liste mit 22.000 zeilen) in ein anderes Tabellenblatt überträgt und dort einiges mit bereits hinterlegten Formeln berechnet.
Vor dem kopieren der Daten erfolgt eine Abfrage ob eine Anlage manuell selektiert wurde oder nicht, bei "nein" wird das macro abgebrochen. Anschließend werden die Daten in ein Diagramm übertragen und auf einem weiteren Tabellenblatt dargestellt.Ebenfalls in diesem Diagramm sind fix hinterlegte Daten des Jahresdurchschnitts der jeweiligen Region, mit welchem die Anlage verglichen werden soll.
In diesem Diagramm sind auf der X-Achse Jahreszahlen von 2009-2015, und auf der Y-Achse die Leistungsfähigkeit in kWh/kWp.
Soviel zur "Basis".
Nun mein Problem:
Ich möchte die Anlage die in das Diagramm eingefügt wird nicht zwingend mit den fix hinterlegten Werten vergleichen, sondern mit einer anderen Anlage:
Das Macro hierfür soll Folgende Schritte durchlaufen:
Abfrage "wurde Anlage selektiert" - Nein Abbruch, Ja - Anlage in Berechnungsblatt kopieren - Abfrage "soll zweite Anlage selektiert werden" - Nein weiter mit Diagramm erstellen/ Ja - macro stoppt, Benutzer kann zweite Anlage selektieren, dann macro wiederaufnehmen und zweite Anlage in Berechnungsblatt - Weiter mit Diagramm erstellen
Vielen Dank schonmal, ich bin wirklich ein VBA Neuling, und habe mir nur Brocken davon ohne professionelle Hilfe in Form eines Lehrgangs oder ähnlichem angeeignet.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Codeausführung unterbrechen/fortsetzen
25.09.2016 18:29:30
fcs
Hallo Hannes,
du kannst deine Abfragen wie folgt strukturieren.
Dabei wird dann das Makro nicht abgebrochen, sondern es nach einer Zelle/Zeile gefragt, die per Maus ausgewählt wird, in der die Infos zur 2. Anlage gefunden werden können.
Ob das so funktionieren kann hängt auch davon ab, wie die Daten in deiner Arbeitsmappe enthalten sind.
Gruß
Franz
Sub Auswertung()
Dim varBox As Variant
Dim Zeile As Long
On Error GoTo Fehler
varBox = MsgBox("Wurde eine Anlage selektiert?", vbQuestion + vbYesNo, "Erstellen  _
Vergleichsdiagramm")
If varBox = vbNo Then
MsgBox "Diagrammerstellung wurde abgebrochen"
Exit Sub
End If
'hier dein Code für das kopieren der Daten für die slektierte Alage in das Berechnungsblatt
varBox = MsgBox("Soll zweite Anlage selektiert werden?", vbQuestion + vbYesNo, "Erstellen  _
Vergleichsdiagramm")
If varBox = vbYes Then
'wechseln zum Blatt für die Selektion der 2. Anlage
Sheets("Anlagen").Activate
'Inputbox zur Auswahl der 2. Anlage
Set varBox = Application.InputBox("Bitte Zelle in Zeile mit der zweite Anlage  _
selektieren?", _
"2. Anlage auswählen - Erstellen Vergleichsdiagramm", Type:=8)
If IsObject(varBox) Then
Dim WertFix1, WertFix2
Zeile = varBox.Row
MsgBox "Es wird mit der Anlage in Zeile " & Zeile & " verglichen" 'Testzeile
'Daten zur 2. Anlage ins Diagramm übertragen
WertFix1 = Cells(Zeile, 1) 'ANlage
WertFix2 = Cells(Zeile, 2) 'was weiß ich
Else
MsgBox "Diagrammerstellung wurde abgebrochen"
Exit Sub 'Abbrechen wurde gewählt
End If
Else
MsgBox "Es wird mit Fixwerten verglichen" 'Testzeile
'Fixwerte verwenden - ggf. Fixwerte eintragen für Diagramm
End If
'  Weiter mit Diagramm erstellen
'Am Ende des Makros
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case 13 'Typfehler bei Zellauswahl, da abgebrochen wurde
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
VBA Codeausführung unterbrechen - Korrektur
25.09.2016 18:33:44
fcs
Hallo hannes,
bei der 1. Antwort sind mir ein paar Zeilenumbrüche reingeraten.
Gruß
Franz
Sub Auswertung()
Dim varBox As Variant
Dim Zeile As Long
On Error GoTo Fehler
varBox = MsgBox("Wurde eine Anlage selektiert?", vbQuestion + vbYesNo, _
"Erstellen Vergleichsdiagramm")
If varBox = vbNo Then
MsgBox "Diagrammerstellung wurde abgebrochen"
Exit Sub
End If
'hier dein Code für das kopieren der Daten für die slektierte Alage in das Berechnungsblatt
varBox = MsgBox("Soll zweite Anlage selektiert werden?", vbQuestion + vbYesNo, _
"Erstellen Vergleichsdiagramm")
If varBox = vbYes Then
'wechseln zum Blatt für die Selektion der 2. Anlage
Sheets("Anlagen").Activate
'Inputbox zur Auswahl der 2. Anlage
Set varBox = Application.InputBox( _
"Bitte Zelle in Zeile mit der zweite Anlage selektieren?", _
"2. Anlage auswählen - Erstellen Vergleichsdiagramm", Type:=8)
If IsObject(varBox) Then
Dim WertFix1, WertFix2
Zeile = varBox.Row
MsgBox "Es wird mit der Anlage in Zeile " & Zeile & " verglichen" 'Testzeile
'Daten zur 2. Anlage ins Diagramm übertragen
WertFix1 = Cells(Zeile, 1) 'ANlage
WertFix2 = Cells(Zeile, 2) 'was weiß ich
Else
MsgBox "Diagrammerstellung wurde abgebrochen"
Exit Sub 'Abbrechen wurde gewählt
End If
Else
MsgBox "Es wird mit Fixwerten verglichen" 'Testzeile
'Fixwerte verwenden - ggf. Fixwerte eintragen für Diagramm
End If
'  Weiter mit Diagramm erstellen
'Am Ende des Makros
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case 13 'Typfehler bei Zellauswahl, da abgebrochen wurde
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: VBA Codeausführung unterbrechen - Korrektur
26.09.2016 07:43:52
Hannes
Guten Morgen Franz,
evtl. habe ich mich nicht klar genug ausgedrückt, verzeihung.
Die zu filternden Daten stehen beide male in der selben Tabelle.
Das macro müsste also praktisch Daten der ersten anlage in das diagramm kopieren, anschließend alle filter löschen und abwarten bis der Benutzer eine zweite Anlage per Hand selektiert, anschließend auch das wieder kopieren und dannach die filter löschen.
Anzeige
AW: VBA Codeausführung unterbrechen - Korrektur
26.09.2016 20:30:30
fcs
Hallo Hannes,
bei diesem Ablauf kommt man dann esser zurecht, wenn man das Ganze über ein Userform steuert, dessen Eigenschaft "ShowModal" auf Falsch/False gesetzt ist. Dann "schwebt" das Userform solange über der Excel-Tabelle bis es geschlossen wird (manuell oder vom Makro. Man kann zwischen Befehlen, die man im Userform startet in den Tabellenblättern arbeiten.
Hier eine kleine Beispieldatei.
https://www.herber.de/bbs/user/108422.xlsm
Die Module "Modul_Diagramm" und "UF_Diagramm" kannst du per Drag&Drop in deine Datei kopieren.
Die Makros zum kopieren der gefilterten Daten und der fixen Referenzwerte musst du entsprechend umbauen bzw. deine schon vorhadenen Makros einbauen/verwenden.
Gruß
Franz
Anzeige
AW: VBA Codeausführung unterbrechen - Korrektur
27.09.2016 07:24:12
Hannes
Guten Morgen,
vielen Dank für diesen Tipp :)
Ich habe mich zwar mit Userformen noch nicht näher beschäftigt, aber ich werde das mal ausprobieren sobald ich am rechner bin :)
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

VBA Codeausführung unterbrechen und fortsetzen


Schritt-für-Schritt-Anleitung

Um einen VBA Code zu unterbrechen und fortzusetzen, kannst du die folgenden Schritte befolgen. Das Beispiel basiert auf einem Szenario, bei dem Daten von Solaranlagen in ein Diagramm übertragen werden:

  1. Vorbereitung: Stelle sicher, dass deine Excel-Datei die benötigten Daten enthält und dass du ein Makro zur Datenübertragung erstellt hast.

  2. Nachfrage implementieren: Füge eine MsgBox hinzu, die fragt, ob eine Anlage selektiert wurde:

    varBox = MsgBox("Wurde eine Anlage selektiert?", vbQuestion + vbYesNo, "Erstellen Vergleichsdiagramm")
    If varBox = vbNo Then
       MsgBox "Diagrammerstellung wurde abgebrochen"
       Exit Sub
    End If
  3. Zweite Anlage abfragen: Implementiere eine weitere MsgBox, um zu prüfen, ob eine zweite Anlage ausgewählt werden soll:

    varBox = MsgBox("Soll zweite Anlage selektiert werden?", vbQuestion + vbYesNo, "Erstellen Vergleichsdiagramm")
    If varBox = vbYes Then
       ' Hier kannst du den Code zum Auswählen der zweiten Anlage einfügen
    End If
  4. Code zur Auswahl der Zelle: Nutze eine InputBox, um den Benutzer aufzufordern, die Zelle mit der zweiten Anlage auszuwählen:

    Set varBox = Application.InputBox("Bitte Zelle in Zeile mit der zweiten Anlage selektieren?", Type:=8)
  5. Diagramm erstellen: Füge schließlich den Code hinzu, um das Diagramm zu erstellen, nachdem die Daten übertragen wurden.


Häufige Fehler und Lösungen

  • Fehler: Typfehler bei Zellauswahl
    Wenn der Benutzer die Auswahl abbricht, kann ein Typfehler auftreten. Um dies zu verhindern, kannst du den folgenden Code verwenden:

    If IsObject(varBox) Then
      ' Weiter mit dem Code
    Else
      MsgBox "Diagrammerstellung wurde abgebrochen"
      Exit Sub
    End If
  • Diagramm wird nicht erstellt
    Stelle sicher, dass die Dateneingabe korrekt ist und dass alle erforderlichen Variablen definiert sind.


Alternative Methoden

Eine alternative Methode, um einen VBA Code zu unterbrechen und fortzusetzen, ist die Verwendung von UserForms. Mit einem UserForm kannst du die Benutzerinteraktion besser steuern, indem du Eingaben in einem Dialogfeld sammelst, das über der Excel-Oberfläche schwebt.

  1. UserForm erstellen: Erstelle ein neues UserForm und füge Steuerelemente wie Schaltflächen und Textfelder hinzu.
  2. Modalität einstellen: Setze die Eigenschaft „ShowModal“ auf False, damit das UserForm nicht blockiert.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du den VBA Code anhalten und fortsetzen kannst:

Sub Auswertung()
    Dim varBox As Variant
    Dim Zeile As Long
    On Error GoTo Fehler
    varBox = MsgBox("Wurde eine Anlage selektiert?", vbQuestion + vbYesNo, "Erstellen Vergleichsdiagramm")

    If varBox = vbNo Then
        MsgBox "Diagrammerstellung wurde abgebrochen"
        Exit Sub
    End If

    varBox = MsgBox("Soll zweite Anlage selektiert werden?", vbQuestion + vbYesNo, "Erstellen Vergleichsdiagramm")
    If varBox = vbYes Then
        Sheets("Anlagen").Activate
        Set varBox = Application.InputBox("Bitte Zelle in Zeile mit der zweiten Anlage selektieren?", Type:=8)
        If IsObject(varBox) Then
            Zeile = varBox.Row
            MsgBox "Es wird mit der Anlage in Zeile " & Zeile & " verglichen"
        Else
            MsgBox "Diagrammerstellung wurde abgebrochen"
            Exit Sub
        End If
    Else
        MsgBox "Es wird mit Fixwerten verglichen"
    End If
    ' Weiter mit Diagramm erstellen
Fehler:
    With Err
        Select Case .Number
            Case 0 ' alles ok
            Case 13 ' Typfehler
                Resume Next
            Case Else
                MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        End Select
    End With
End Sub

Tipps für Profis

  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung, um sicherzustellen, dass dein Makro robust ist und bei unerwarteten Eingaben nicht abstürzt.
  • Code modularisieren: Halte deinen Code modular, indem du häufig verwendete Funktionen in separate Subs oder Funktionen auslagerst. So bleibt dein Hauptmakro übersichtlich.

FAQ: Häufige Fragen

1. Was mache ich, wenn das Makro nicht reagiert?
Überprüfe, ob du alle erforderlichen Variablen definiert hast und ob die Dateneingabe korrekt ist.

2. Wie kann ich einen bestehenden VBA Code anpassen?
Du kannst den bestehenden Code in das VBA-Editor-Fenster kopieren und die notwendigen Anpassungen vornehmen, um deine spezifischen Anforderungen zu erfüllen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige