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

Makro im Makro ausführen. Wenn - dann

Makro im Makro ausführen. Wenn - dann
28.05.2023 20:12:52
Winfried

Gruess Gott miteinander,

gerne würde ich im meiner "Ausdruckroutine" ein Makro starten wenn in einer Tabellenblattzelle ein bestimmter Wert steht. Hier meine Routine:

Sub Druck_alle_Massenlisten_zu_Lieferschein()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim a As Integer
Dim s As String
Set ws = Workbooks("Bearbeitung.xls").Worksheets("Angebot")
Set ws2 = Workbooks("Bearbeitung.xls").Worksheets("Support")
For a = 50 To 200
If ws2.Cells(a, 1).Value = "ja" Then
s = ws.Cells(a, 11).Value & ".xls"
Windows(s).Activate
Application.Run "'" & s & "'!Lieferschein"
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Application.Wait Now + TimeSerial(0, 0, 0.01)
'If Target.Address = "MassenlistenSchliessenOderNicht" Then
'If Target.Value = 2 Then
Application.Run "PERSONL.XLS!AktiveDateiSchliessenOhneSpeichern"
Windows("Bearbeitung.xls").Activate
End If
Next a
End Sub

Es geht darum das Makro im Makro nur dann ablaufen zu lassen wenn ein Bestimmter Wert in einer Zelle eines Tabellenblatts der Datei Bearbeitung.xls steht.
Ich hatte bereits den Versuch unternommen einer Zelle den Namen "MassenlistenSchliessenOderNicht" zu geben und wenn eine 2 in der Zelle steht das Makro "AktiveDateiSchliessenOhneSpeichern" mit ablaufen zu lassen. Geht natürlich mangels Fachkenntnisse nicht... Hier herausgelöst die Zeilen um die es geht:
'If Target.Address = "MassenlistenSchliessenOderNicht" Then
'If Target.Value = 2 Then
Application.Run "PERSONL.XLS!AktiveDateiSchliessenOhneSpeichern"
Letztendlich möchte ich gar mehrere verschiedene Makros auswählen können:
'If Target.Address = "MassenlistenSchliessenOderNicht" Then
'If Target.Value = 2 Then
Application.Run "PERSONL.XLS!AktiveDateiSchliessenOhneSpeichern"
'If Target.Value = 1 Then
Application.Run "PERSONL.XLS!AktiveDateiSchliessenMitSpeichern"
'If Target.Value = 0 Then
'Nothing

Über jedwede Hilfe freue ich mich sehr!

Mit freundlichen Gruessen

Winfried

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro im Makro ausführen. Wenn - dann
28.05.2023 20:46:47
GerdL
Grüß dich Winfried!
So:
If Workbooks("Bearbeitung.xls").Range("MassenlistenSchliessenOderNicht") = 2 Then
Oder:
'If Workbooks("Bearbeitung.xls").Worksheets("DeinTabellenname").Range("MassenlistenSchliessenOderNicht") = 2 Then

Ob der Application.Run innerhalb der Schleife erfolgen soll, musst du wissen.

Gruß Gerd


AW: Makro im Makro ausführen. Wenn - dann
28.05.2023 22:46:20
Winfried
Vielen Dank Gerd!

Das sollte so laufen! Jetzt kommt nur noch die Fehlermeldung

"Fehler beim Kompilieren:
Next ohne For"

und beim Ende des Makros wird bei

"End If
Next a

End Sub"
Das >Next markiert. Vielleicht weisst Du was ich noch ändern muss.

Schoene Gruesse

Winfried


Anzeige
AW: Makro im Makro ausführen. Wenn - dann
28.05.2023 22:55:27
Pappawinni
Wenn du der Meinung bist, dass da kein For fehlt, dann poste doch mal deinen ganzen Code....


AW: Makro im Makro ausführen. Wenn - dann
28.05.2023 23:18:13
Pappawinni
Es gibt bei IF die Variante
IF boolscherAusdruck Then Befehl
in diesem Fall darf kein END IF folgen
aaaaber bei
IF bolscherAusdruck Then
    Befehl
    Befehl
END IF
braucht es eben ein END IF
Wenn du nun eine Schleife hast, die mit For beginnt, aber ein IF noch nicht beendet ist, also z.B. so:
FOR ...
    IF Ausdruck Then
       Befehl
    NEXT
Dann kommt das NEXT logischerweise unerwartet. Du darfst raten, warum man da Einrückungen macht.


Anzeige
AW: Makro im Makro ausführen. Wenn - dann
29.05.2023 11:18:23
Winfried
Hallo Pappawinni,

hier nun der gesamte Code:
------------------------------------------------------------------------
Sub Druck_alle_Massenlisten_zu_Lieferschein()

Dim ws As Worksheet
Dim ws2 As Worksheet
Dim a As Integer
Dim s As String
Set ws = Workbooks("Bearbeitung.xls").Worksheets("Angebot")
Set ws2 = Workbooks("Bearbeitung.xls").Worksheets("Support")
For a = 50 To 200
    If ws2.Cells(a, 1).Value = "ja" Then
        s = ws.Cells(a, 11).Value & ".xls"
        Windows(s).Activate
        Application.Run "'" & s & "'!Lieferschein"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
        Application.Wait Now + TimeSerial(0, 0, 0.01)
        If Workbooks("Bearbeitung.xls").Worksheets("Support").Range("MassenlistenSchliessenOderNicht") = 2 Then
        Application.Run "PERSONL.XLS!AktiveDateiSchliessenOhneSpeichern"
        Windows("Bearbeitung.xls").Activate
        
    End If
Next a

End Sub
------------------------------------------------------------------------

Wie gesagt kommt die Fehlermeldung "Fehler beim Kompilieren: Next ohne For" und "Next" in der zweitletzten Zeile wird markiert.
Komme echt nicht weiter..

Vielen Dank!

Winfried


Anzeige
AW: Makro im Makro ausführen. Wenn - dann
29.05.2023 12:26:35
Pappawinni
Wie erwartet, liegt dein aktuelles Problem darin, dass du vor dem NEXT noch ein offenes IF hast

Sub Druck_alle_Massenlisten_zu_Lieferschein()

Dim ws As Worksheet
Dim ws2 As Worksheet
Dim a As Integer
Dim s As String

Set ws = Workbooks("Bearbeitung.xls").Worksheets("Angebot")
Set ws2 = Workbooks("Bearbeitung.xls").Worksheets("Support")

For a = 50 To 200
    If ws2.Cells(a, 1).Value = "ja" Then
        s = ws.Cells(a, 11).Value & ".xls"
        Windows(s).Activate
        Application.Run "'" & s & "'!Lieferschein"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
        Application.Wait Now + TimeSerial(0, 0, 0.01)
        If Workbooks("Bearbeitung.xls").Worksheets("Support").Range("MassenlistenSchliessenOderNicht") = 2 Then
            Application.Run "PERSONL.XLS!AktiveDateiSchliessenOhneSpeichern"
            Windows("Bearbeitung.xls").Activate
        End If
    End If
Next a
End Sub
Ich mach das in aller Regel so, dass ich, sobald ich einen IF-Satz erzeugt habe und nach dem Then ENTER drücke, dass ich
dann gleich in die nächste Zeile ein END IF schreibe. Dann erst schreib ich das, was zwischen IF und END IF rein kommt, selbstverständlich mit Einrückung.


Anzeige
AW: Makro im Makro ausführen. Wenn - dann
28.05.2023 20:47:44
Pappawinni
target ? uahh
Probier mal sowas:

Dim lngCloseMode
lngCloseMode = Range("MassenlistenSchliessenOderNicht").value
select case lngCloseMode
     case 1: MsgBox "Fall 1"
     case 2: MsgBox "Fall 2"
     case else: Msgbox "Fall andere"
end select


AW: Makro im Makro ausführen. Wenn - dann
29.05.2023 11:48:02
GerdL
Hallo Winfried,

diese Fehlermeldung kommt auch, wenn in der Schleife ein IF oder ein EndIF fehlt.
Da du fürs Blatt Support eine Variable deklariert hast, kannst du ws2 benutzen.

Vermutlich würde es auch ohne "Windows" funktionieren, nur mit dem Blattobjekt.

Sub Druck_alle_Massenlisten_zu_Lieferschein()

Dim ws As Worksheet
Dim ws2 As Worksheet
Dim a As Long
Dim s As String

Set ws = Workbooks("Bearbeitung.xls").Worksheets("Angebot")
Set ws2 = Workbooks("Bearbeitung.xls").Worksheets("Support")

For a = 50 To 200
    
    If ws2.Cells(a, 1).Value = "ja" Then
        
        s = ws.Cells(a, 11).Value & ".xls"
        Windows(s).Activate
        Application.Run "'" & s & "'!Lieferschein"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
        Application.Wait Now + TimeSerial(0, 0, 0.01)
        
        If ws2.Range("MassenlistenSchliessenOderNicht") = 2 Then
            Application.Run "PERSONL.XLS!AktiveDateiSchliessenOhneSpeichern"
            Windows("Bearbeitung.xls").Activate
        End If   'ergänzt
    
    End If
Next a

End Sub
Gruß Gerd


Anzeige
AW: Makro im Makro ausführen. Wenn - dann
29.05.2023 14:05:41
Winfried
Hallo Gerd,

vielen lieben Dank!
Läuft jetzt hervorragend.
Hätte es ohne Deine Hilfe nicht geschafft!

Schoene Gruesse

Winfried

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige