Mit 1 CommandButton unterschiedliche Makros aus PullDown-Liste abrufen
#1
Hallo liebe Community,
ich habe heute so viel geExcelt, dass mir die Birne qualmt und ich auf dem Schlauch stehe. Ich hoffe auf die Gemeinschaft, die mir "fix" 30 einen Code für einen CommandButton basteln kann.
Es geht um Rechnungen welche aus mehreren Seiten bestehen – vereinfacht: Original, Kopie, Buchungsbeleg. Das Drucken dieser einzelnen Seiten erfolgt mit unterschiedlichsten Konstellationen und Druckern, z.Bsp. Drucke den Buchungsbeleg aus und mach die Originalrechnung zum PDF oder Drucke Original , Kopie und Buchungsbeleg oder PDF nur Original und Kopie etc. etc. Aktuell gibt es 5 Varianten für die ich mir kleine Makros gebastelt habe (Sub Print1(), Sub Print2 () . . . . jeweils eines für jede Konstellation. Diese Makros funktionieren (Druckerauswahl, Druckbereich etc.) beim Testen schon mal einwandfrei.
Nun möchte ich natürlich nicht 5 Druckbuttons auf die Rechnung klecksen, sondern nur EINEN CommandButton namens PRINT. Über ein nebenstehendes PullDownMenü wähle ich vorher die gewünschte Druck-Konstellation aus (für die ja jeweils ein Makro existiert), sprich ich wähle das gewünschte Makro "Print1" oder "Print2" oder "Print3" etc. und dann soll der Code des Commandbutton (den ich hier suche) wissen welches Makro ausgewählt wurde und dieses entsprechend auf CLICK abarbeiten.
Kurz, ich möchte aus verschiedenen Makros, deren Namen in einer Auswahlliste stehen (Pulldown) eines auswählen können und der CommandButton PRINT soll das ausgewählt Makro erkennen und abarbeiten.
Klingt in der Theorie eigentlich überschaubar 20 .
Es müsste irgendwie über VBA das gewählte Ergebnis (Makro Sub Print1(), Sub Print2 () . . . ausgelesen werden und als aktiv abgearbeitet werden.
Hat hierzu vielleicht jemand eine Idee. Ich habe mir hier im Forum schon so viel abgeschaut und bin immer wieder begeistert (und glücklich wenn ich was finde), wie schnell Menschen ganz nebenbei die komplexesten Dinge lösen – beeindruckend (ich probier da immer stundenlang rum 22 )
Vielen vielen Dank vorab für Eure Zeit und Hilfe
Liebe Grüße
Jürgen
Antworten Top
#2
Hi Jürgen,

ist mit Pulldownmenü jetzt eine Dropdownzelle oder eine Combobox gemeint? 


Bsp (Dropdownzelle befindet sich in A1 der Tabelle1 und die zu druckenden Blätter heißen Rechnung, Auftrag oder wie auch immer, also wie die Werte in A1...):

Code:
Sub Drucken

Worksheets(Tabelle1.cells(1,1).value).PrintOut Copies:=1, Collate:=True
End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Hallo Ralf,
vielen Dank für Deine Antwort. Ein anderer Ansatz, den ich am WE mal ausprobiere. Ich befürchte nur, dass der Code dann zu lang und unübersichtlich wird bis alle Konstellationen untergebracht sind (zumindest für meine VBA-"Kenntnisse"). Zumal ja auch unterschiedliche Drucker innerhalb eines Makros angesprochen werden müssen. Außerdem evtl. zu kompliziert bei möglichen Änderungen und/oder Ergänzungen.
Mir schwebt vor über den CommandButton "PRINT" ein zuvor ausgewähltes Makro zu starten, also ne Art Variable. Ich habe ja bereits für aktuell jede gewünchte Druckkonstellation ein eigenes kleines funktionierendes Makro. Nun dachte ich, wenn ich über die Auswahlliste eine Druckkonstellation auswähle (wie in Deinem Bsp in Zelle A1), dann lasse ich mir den Namen des dazugehörigen Makros in einem Ergebnisfeld (meinetwegen in B1) anzeigen. Und wenn ich nun den "PRINT"-Button drücke liest er den Makronamen aus B1 und startet dieses Makros. Damit könnte ich bestehende Makros zukünftig editieren oder neue hinzufügen etc., was die Sache übersichtlicher und flexibler machen würde.

Hier sind mal 2 Beispiele meiner kleinen Druck-Makros:
Code:
Sub Print1()

' Print1 = Buchhaltungskopie_RG (Seite 3) drucken, Original_RG (Seite 1) PDF

    'Buchhaltungsdrucker (RICOH MP C2003 (Buchhaltung) auf Ne03:) für Buchungskopie_RG (Seite 3) aktivieren
    Application.ActivePrinter = "RICOH MP C2003 (Buchhaltung) auf Ne03:"

        'Auswahl und Druck der Seite 3 (Buchungskopie_RG)
        ActiveWindow.SelectedSheets.PrintOut From:=3, To:=3, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
       
    'PDF-Drucker (PDF24 auf Ne05:) für Original_RG (Seite 1)aktivieren
    Application.ActivePrinter = "PDF24 auf Ne05:"

        'Auswahl und Druck der Seite 1 (Original_RG) als PDF (stoppt im PDF24 - Fenster)
         ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False

    'Zurücksetzen des PDF-Druckers auf Standarddrucker Buchhaltung
    Application.ActivePrinter = "RICOH MP C2003 (Buchhaltung) auf Ne03:"


End Sub

Sub Print2()

' Print2 = Buchungskopie_RG (Seite 3) UND Buchhaltungskopie (Seite 4) drucken, Original_RG (Seite 1) PDF

'Buchhaltungsdrucker (RICOH MP C2003 (Buchhaltung) auf Ne03:) für Buchungskopie_RG (Seite 3) und Buchungskopie_GU (Seite 4) aktivieren
    Application.ActivePrinter = "RICOH MP C2003 (Buchhaltung) auf Ne03:"

        'Auswahl und Druck der Seite 3 (Buchungskopie_RG) und Seite 4 (Buchungskopie_GU)
        ActiveWindow.SelectedSheets.PrintOut From:=3, To:=4, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
       
    'PDF-Drucker (PDF24 auf Ne05:) für Original_RG (Seite 1)aktivieren
    Application.ActivePrinter = "PDF24 auf Ne05:"

        'Auswahl und Druck der Seite 1 (Original_RG) als PDF (stoppt im PDF24 - Fenster)
         ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False

    'Zurücksetzen des PDF-Druckers auf Standarddrucker Buchhaltung
    Application.ActivePrinter = "RICOH MP C2003 (Buchhaltung) auf Ne03:"

End Sub
Als nächstes käme dann der Makro-Code für den "PRINT"-Button, z.Bsp. "Sub DRUCKEN ()". Dieser soll den Namen des Makros ("Print1", "Print2" . . . ) entsprechend abgucken und abarbeiten.

Auf "deutsch": Wenn der Button "PRINT" geklickt wird gehe in Zelle B1, nehme dort den Makrobnamen und arbeite dieses Makro ab.
D.h. die Ausführung WELCHES Makro über diesen EINEN Button gestartet wird muss praktisch variabel sein.
Mit meinen sehr bescheidenen VBA-Kenntnissen - dachte ich - wäre diese Variante die einfachste und vor allem flexibelste Lösung. Die einzelnen Codes wären kurz und übersichtlich und man kann sich auch in mehreren Monaten schnell hinendenken und gegebenenfalls Änderungen, Ergänzungen vornehmen.

Wie denkt Ihr darüber ??
Vielen Dank
Jürgen
Antworten Top
#4
Hi

Mach es so. Was du noch suchst ist.

Button Klick ->
Run Range("B1").Value       'in b1 steht der Makroname

Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • Albus1965
Antworten Top
#5
...Du hast doch schon alle Makros da. Es geht doch nur noch darum, welche in Anhängigkeit der Pulldownzellen aufgerufen werden sollen. Das kannst Du über Parameter, Select Case oder direkter Auswertung der Werte realisieren. Genaugenommen brauchst Du nur ein einziges Makro, das entsprechend der gesetzten Werte agiert.

Bsp.: 

Code:
Sub btnPrint_Click()
dim Drucker as string, wsh as string, von as integer, bis as integer
with Tabelle1
'in A1 bis A4 sollen die Auswahlwerte stehen...
Drucker = .cells(1,1).Value ' A1 oder fest: "RICOH MP C2003 (Buchhaltung) auf Ne03:"
wsh = .cells(2,1).value ' A2 - Blattname
von = .cells(3,1).value 'A3
bis = .cells(4,1).value 'A4
End with
Application.ActivePrinter = Drucker

Worksheets(wsh).PrintOut From:=von, To:=bis, Copies:=1, Collate:=True

End Sub

Wenn aber die Variablen von und bis untereinander abweichen aber für bestimmte Blätter immer gleich sein sollen kannst Du ja noch einen Case Zweig einbauen.
Code:
Select Case wsh
case "Rechnung": von = 1 : bis = 2
case "Angebot": von = 2:bis = 3
case else: von = 1:bis = 1

end select
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

[-] Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:
  • Albus1965
Antworten Top
#6
Hallo Ralf, hallo Elex,

vielen Dank Euch beiden - klappt beides wunderbar. 28


Damit ist das Thema erledigt ! *FREU*




Für alle anderen, die hier mitlesen: Ich habe es nun so gelöst:




1.) Für jede gewünschte Druckvariante ein kleines Makro geschrieben wie in den 2 Beispielen oben.


2.) Der Anwender bekommt in Zelle A1 eine Auswahlliste angezeigt welche alle hinterlegten Varianten zur Auswahl stellt.


3.) Die Quelle der Auswahlliste befindet sich auf einem ausgeblendeten Tabellenblatt und zeigt in der Spalte neben jeder Druckvariante den dazugehörigen Makronamen



     



4.) Wählt der Anwender nun üner die Auswahlliste in A1 eine Variante lasse ich mir über sverweis in B1 den entsprechenden Makronamen anzeigen.

(Schriftart weiß, Zelle gesperrt - sieht niemand)


5.) Der CommandButton "PRINT" bekommt nun einfach folgenden Code



Code:
Application.Run Range("B1").Value



und führt nun genau das gewünschte Makro aus.



Und so sieht das beim Anwender aus:


   




Klappt perfekt, vielen Dank nochmal.


Früher musste über das Excel-Druckmenü umständlich der korrekte Drucker gewählt werden, die zu druckenden Seiten angegeben werden und wenn man fertig war erneut das Druckmenü aufrufen, den PDF-Drucker wählen, wieder die entsprechenden Seiten auswählen . . . . nervig und zeitraubend.


Nun wählt man die gewünschte Variante und 1 Klick und man bekommt auf einmal alle gewünschten Seiten gedruckt und alle gewünschten Seiten PDFt.



Super Sache 57so kann ich schaffen




Viele Grüsse


Jürgen
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste