Supportnet / Forum / Tabellenkalkulation
Fehlermeldung-End Sub erwartet
Frage
Hallo,
ich habe von einem netten User eine Lösung für ein Druckmakro mit Bedingung bekommen. Leider erhalte ich immer die Fehlermeldung: End Sub erwartet. Wer kann mir hierbei eiterhelfen? Das Makro schaut folgendermaßen aus:
Sub Makro1 ()
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim beenden As String
If UCase(Cells(1, 1)) = "OK" And UCase(Cells(2, 1)) = "OK" Then
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Else
beenden = MsgBox("ok fehlt in A1 oder A2" & Chr$(13) & _
Chr$(13), vbYes)
Cancel = True
End If
End Sub
Antwort 1 von JoeKe
Hallo,
lösch das :
Befindet sich der Code auch in dem VBA-Projekt "DieseArbeitsmappe" ?
Gruß
JöKe
lösch das :
Sub Makro1 ()
Befindet sich der Code auch in dem VBA-Projekt "DieseArbeitsmappe" ?
Gruß
JöKe
Antwort 2 von thunderd
Hallo JöKe,
vielen Dank für die schnelle Hilfe. Nein das steht im Modul. Ich habe es jetzt in diese Arbeitsmappe kopiert, aber da kann ich das Makro nicht zuweisen.
thunderd
vielen Dank für die schnelle Hilfe. Nein das steht im Modul. Ich habe es jetzt in diese Arbeitsmappe kopiert, aber da kann ich das Makro nicht zuweisen.
thunderd
Antwort 3 von DukeNT
Hallo thunderd,
das Makro brauchst du auch nicht zuweisen.
Sobald du die Mappe drucken willst ruft er das auf.
Gruß Niels
das Makro brauchst du auch nicht zuweisen.
Sobald du die Mappe drucken willst ruft er das auf.
Gruß Niels
Antwort 4 von thunderd
Das ist allerdings nicht alles, da kommt noch ein riesen Rattenschwanz nach, in dem die Datei in einem best. Ordner gespeichert wird und die einzelnen Zellen in eine Tabelle kopiert werden usw. Wie müsste es aussehen, wenn ich es im Modul voranstellen will, das Druckmakro mit der Bedingung?
thunderd
thunderd
Antwort 5 von DukeNT
Dann nimm:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
raus und schreib dafür wieder:
Sub Makro1()
Dann kannst du das Makro wieder aufrufen.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
raus und schreib dafür wieder:
Sub Makro1()
Dann kannst du das Makro wieder aufrufen.
Antwort 6 von thunderd
Super DukeNT,
es hat geklappt, allerdings noch nicht ganz so, wie ich es mir vorstelle. Vielleicht kannst Du mir ja nochmal helfen.
Und zwar mache ich als Bedingung das ich in den Zellen A1 und A2 ein "ok" haben will. Ist das nicht der Fall, erhalte ich die Fehlermeldung. Allerdings wenn ich in der Fehlermeldung auf ok klicke, nimmt das Makro seinen Lauf und kopiert mir die Daten in die Tabelle. Ich möchte aber, dass es nicht druckt und den weiteren Verlauf abbricht, damit ich die Daten so ändern kann, dass dann in beiden Zelle A1+A2 "ok" steht und dann drucke und anschließend die richtigen Daten in die Tabelle kopiere.
Wäre toll wenn Du mir eine Lösung anbieten könntest.
thunderd
es hat geklappt, allerdings noch nicht ganz so, wie ich es mir vorstelle. Vielleicht kannst Du mir ja nochmal helfen.
Und zwar mache ich als Bedingung das ich in den Zellen A1 und A2 ein "ok" haben will. Ist das nicht der Fall, erhalte ich die Fehlermeldung. Allerdings wenn ich in der Fehlermeldung auf ok klicke, nimmt das Makro seinen Lauf und kopiert mir die Daten in die Tabelle. Ich möchte aber, dass es nicht druckt und den weiteren Verlauf abbricht, damit ich die Daten so ändern kann, dass dann in beiden Zelle A1+A2 "ok" steht und dann drucke und anschließend die richtigen Daten in die Tabelle kopiere.
Wäre toll wenn Du mir eine Lösung anbieten könntest.
thunderd
Antwort 7 von JoeKe
Hallo thunderd,
stell den Code so um:
Option Explicit
Sub druck()
Dim beenden As String
If UCase(Cells(1, 1)) <> "OK" Or UCase(Cells(2, 1)) <> "OK" Then
beenden = MsgBox("ok fehlt in A1 oder A2" & Chr$(13) & _
Chr$(13))
Exit Sub
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Rem Hier können weitere Anweisungen folgen
End If
End Sub
Gruß
JöKe
stell den Code so um:
Option Explicit
Sub druck()
Dim beenden As String
If UCase(Cells(1, 1)) <> "OK" Or UCase(Cells(2, 1)) <> "OK" Then
beenden = MsgBox("ok fehlt in A1 oder A2" & Chr$(13) & _
Chr$(13))
Exit Sub
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Rem Hier können weitere Anweisungen folgen
End If
End Sub
Gruß
JöKe
Antwort 8 von thunderd
JöKe,
vielen vielen Dank. Genau so wollte ich es haben.
Schöne Grüße
thunderd
vielen vielen Dank. Genau so wollte ich es haben.
Schöne Grüße
thunderd