Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hilfe bei einigen Codes fürs Drucken

Hilfe bei einigen Codes fürs Drucken
01.02.2021 02:39:48
Jürgen
Guten Morgen zusammen,
da man mir hier in der Vergangenheit schon öfters super weitergeholfen hat, wende ich mich nun mal wieder Euch.
Und zwar habe ich verschiedene Arbeitsmappen aus den ich täglich verschiedene Tabellenblätter drucken muss. Um mir das zu erleichtern habe ich mir nur eine "Übersichts"Tabelle erstellt aus der ich dann gerne per Button die verschiedenen Tabellen direkt ausdrucken lassen kann.
Zu den einzelnen Vorstellungen aber nun mal mehr:
1. In den Bereichen B7 bis X17 soll nach dem klick auf den Button folgendes passieren.
Excelmappe "Unsichtbar" bzw. im Hintergrund öffnen (ist Wichtig da in diesen Blättern Zeilen vorhanden sind die das aktuelle Datum inkl. 4Stunde drauf rechnen und Übernehmen). Anschließend soll das ganze 4mal gedruckt werden und die Excelmappe ohne Änderung und ohne Rückfragen geschlossen werden.
Für den Button in C7 habe ich das sogar hinbekommen aber leider funktionieren die anderen nicht.
Aber abgesehen davon kennt ja sogar jemand nen besseren Weg bzw. optimierteren Code, immerhin sind das ne Menge Buttons für die Aktion und die Übersicht wird immer erweitert.
2.In Zeile 23 wird eine externe Mappe aufgerufen mit anschließender Abfrage wieviele Seiten gedruckt werden sollen. Die Buttons gehen sogar bisher aber vielleicht kennt auch hier jemand eine elegantere Code Art.
3. Bereich B25 bis X27 komme ich allerdings gar nicht weiter.
Nach dem klick auf den Button soll eine Arbeitsmappe geöffnet werden und ein bestimmtes Tabellenblatt anhand des Blattnamens gedruckt werden. Also "Tabelle5" beim nächsten Button vielleicht "Tabelle10" usw.
aber ich bekomme es nicht hin dass das angegebene Tabellenblatt ausgewählt wird.
Bevor nun der eigentliche Druck startet soll noch das "klassische" Drucker Menüfenster geöffnet werden um dort den richtigen Drucker auswählen zu können und die Anzahl der Seiten angegeben werden kann.
Wäre schön wenn sich jemand von Euch mal die Zeit nehmen könnte und einen Blick in die Datei und den Code wirft und man mir diesen korrigiert und vielleicht optimiert.
https://www.herber.de/bbs/user/143481.xlsm
https://www.herber.de/bbs/user/143482.xlsm
Vielen Dank schon mal an alle im voraus.
Gruß
Jürgen

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 09:51:10
ralf_b
Moin,
das dies nicht klappt hast du sicher schon bemerkt.
du deklarierst eine Methode in einer Anderen. Das geht nicht.

Private Sub CVT_03_Click()
Sub OeffnenDruckenSchliessen_CVT_03()
Wenn du dir Codezeilen sparen willst, dann lagere gleichen Code aus.
Identische Pfadangaben z.b. als konstante Werte im Codemodul deklarieren.
Die Sub OEDS erhält bei Aufruf einen Text, mit dem dann der Dateiname zusammengesetzt wird.
Schöner wäre es wenn man den Dateiname direkt aus der Buttonbezeichnung oder der Beschriftung entnehmen könnte. Aber hier hast du z.b. cvt_02 als Buttonbeschriftung aber cvt_002 als Dateiname. das ist dafür nicht hilfreich.
Const SDRUCKPATH = "C:\druckdaten\"
Const SWASAUCHIMMER = "GM_DON_"
Sub OEDS(sName As String)
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Workbooks.Open (SDRUCKPATH & SWASAUCHIMMER & sName & ".xlsm")
Worksheets(1).PrintOut Copies:=4, Preview:=False, Collate:=True
ActiveWorkbook.Close savechanges:=False
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub OeffnenDruckenSchliessen_CVT_02()
OEDS "CVT_002"
End Sub
du könntest auch ohne Buttons auskommen.
Man kann ein Ereignis(Event) abfragen.
dieser Code müßte ins Codemodul deiner Tabelle1
z.b. Einen Doppelklick auf eine Zelle

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Value  "" Then OEDS sName:=Target.Value
End Sub 

Anzeige
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 10:07:42
Herbert_Grom
Hallo Ralf,
alternativ zum auslagern ginge auch "Gosub xxx & Return".
Servus
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 10:09:58
ralf_b
Hallo Herbert,
danke für die Info, das ist mir nicht so geläufig.
gruß
rb
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 10:15:40
Herbert_Grom
Hallo Ralf,
gerne geschehen! Weißt du wie es funktioniert? Wenn nicht, hier eine kurze Erläuterung:
Es wird gehändelt wie "Goto", nur dass am Ende das "Return" kommt, mit dem er wieder an die Stelle im Code zurück springt. Falls du mehr Info brauchst, sag Bescheid.
Servus
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 10:34:50
ralf_b
Hallo Herbert,
ich habe es gleich nachgeschlagen. Es ist aber ein Sprung innerhalb der aufrufenden Sub mit Rückkehr.
Also der Code kann dann nicht von anderen Routinen benutzt werden.
gruß
rb
Anzeige
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 10:43:30
Herbert_Grom
Hallo Ralf,
das ist richtig. Wenn man ihn für mehrere Routinen benötigt, dann natürlich nur extern. Aber als Alternative, wenn es geht, ist er gut zu gebrauchen.
Servus
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 14:43:01
Jürgen
Hey,
vielen Dank für Eure bisherigen schnelle Hilfestellungen.
Deine Idee zum Code sparen habe ich direkt mal so übernommen.
Bei den CVTs wäre es sogar noch möglich den Dateinamen aus dem Namen des Buttons zu übernehmen,
bei den anderen Dateien wird's da schwieriger.
Für mein 2tes Anliegen habe ich ebenfalls eine Lösung gefunden.
Konnte das ganze mit dem folgenden Code umsetzen:

Sub Druck_006_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Workbooks.Open ("C:\druckdaten\Export Sattelliste_V9.xlsm")
Dim loAnzahl As Long
loAnzahl = Application.InputBox("Anzahl:", "Anzahl der Ausdrucke", 1, Type:=1)
If loAnzahl > 0 Then
ActiveWorkbook.Sheets("Tabelle1").PrintOut Copies:=loAnzahl, Collate:=True
ActiveWorkbook.Close savechanges:=False
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
Das 3te Problem konnte ich ebenfalls Umsetzen mit dem folgenden Code:

Sub Leit_Druck_01_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Workbooks.Open ("C:\druckdaten\Muster Leitzettel.xlsx")
ActiveWorkbook.Sheets("Leitzettel Medion").Activate
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveSheet.PrintPreview
ActiveWorkbook.Sheets("Leitzettel Medion").PrintOut Collate:=True
ActiveWorkbook.Close savechanges:=False
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Allerdings interessiert es mich natürlich jetzt brennend ob man diese Codezeilen ebenfalls noch "Auslagern" bzw. verkürzen kann.
Die beiden "Code Funktionen" wenn ich das mal so nennen darf befinden sich in einem Modul und daher Sieht das ganze ungefähr so aus:

Sub Druck_006_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Workbooks.Open ("C:\druckdaten\Export Sattelliste_V9.xlsm")
Dim loAnzahl As Long
loAnzahl = Application.InputBox("Anzahl:", "Anzahl der Ausdrucke", 1, Type:=1)
If loAnzahl > 0 Then
ActiveWorkbook.Sheets("Tabelle1").PrintOut Copies:=loAnzahl, Collate:=True
ActiveWorkbook.Close savechanges:=False
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
Sub Leit_Druck_01_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Workbooks.Open ("C:\druckdaten\Muster Leitzettel.xlsx")
ActiveWorkbook.Sheets("Leitzettel Medion").Activate
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveSheet.PrintPreview
ActiveWorkbook.Sheets("Leitzettel Medion").PrintOut Collate:=True
ActiveWorkbook.Close savechanges:=False
ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub Leit_Druck_02_Click()
Gibt es hier auch die Möglichkeit Identische Codes als Konstanze "auszulagern" ? und wenn ja wie muss das ganz Aussehen?
Wäre schön wenn du mir da auch noch was passendes zusammen Basteln würdest.
Abschließend habe ich aber noch eine Frage bzw. meine vorerst letzte Aktion für diese"Übersichtliche"
Und zwar möchte ich gerne per Button eine externe Arbeitsmappe in einem extra Excel Fenster bzw. einer neuen Instanz öffnen.
Leider konnte ich bis jetzt dazu nichts wirklich befriedigendes finden.:-( ..... hat dazu jemand ne Idee bzw. kann mir den passenden Code liefern?
VG
Anzeige
AW: Hilfe bei einigen Codes fürs Drucken
01.02.2021 15:01:35
ralf_b
deine drucksubs kannst du genauso!!! wie die anderen auslagern.
es kommt ja nur drauf an welchen variablen Textteil du beim jeweiligen Aufruf mit der Click-Methode an die function übergibst.
Wer bestimmt denn was auf den Buttons steht oder wie die heissen? Der Name ist ja nicht sichtbar.
Also könntest du auch die Druckbuttons entsprechend der zieldateien anpassen.
die anzahl der Kopien kann auch mit in die sub übergeben werden. Das würde es etwas übersichtlicher machen. Sind nur kleine Anpassungen. Alsodie inputbox geschicht mit in die Button_click und den wert mit übergeben.
sub button_click()
dim anzahl
anzahl = inputbox("blablaba")
if anzahl > 0  then
call drucken(dateiname , anzahl)
end if
end sub 
gruß
rb
Anzeige
AW: Hilfe bei einigen Codes fürs Drucken
02.02.2021 17:27:47
Jürgen
"deine drucksubs kannst du genauso!!! wie die anderen auslagern.
es kommt ja nur drauf an welchen variablen Textteil du beim jeweiligen Aufruf mit der Click-Methode an die function übergibst."

Werde ich mich dann wohl nochmal mit Beschäftigen müssen, mal schauen wie weit ich komme.
Blicke da noch nicht so wirklich durch was,wie und warum an die function übergeben wird.
Ich werds aber mal Zeile für Zeile bzw. Variable für Variable durch testen.
"Wer bestimmt denn was auf den Buttons steht oder wie die heissen? Der Name ist ja nicht sichtbar.
Also könntest du auch die Druckbuttons entsprechend der zieldateien anpassen."

Wie müsste der Code den Aussehen wenn ich das ganze Anpasse?
"die anzahl der Kopien kann auch mit in die sub übergeben werden. Das würde es etwas übersichtlicher machen. Sind nur kleine Anpassungen. Alsodie inputbox geschicht mit in die Button_click und den wert mit übergeben."
sub button_click()
dim anzahl
anzahl = inputbox("blablaba")
if anzahl > 0  then
call drucken(dateiname , anzahl)
end if
end sub 

Damit werde ich mich,sobald ich die Zeit und Ruhe dazu habe, auch mal beschäftige und schauen wie ich das ganze Einbaue.
Hast du denn vielleicht auch noch ein Tip für mein offenes Problem?
Ein Button der auf _click() eine Excel Datei in einem neuen Fenster bzw. einer neuen Instanz öffnet?
VG und Danke nochmal
Anzeige
AW: Hilfe bei einigen Codes fürs Drucken
02.02.2021 17:48:58
ralf_b
Hallo Jürgen,
das sind alles Basics, sehr gut dokumentiert und recherchierbar. Viele Beispiele und Tutorials.
Es ist müßig dies dann immer wieder ins Netz zu schreiben, wenn es doch schon drin steht.
Wegen der Instanz was zum Schmökern https://docs.microsoft.com/de-de/office/troubleshoot/office-suite-issues/getobject-createobject-behavior
zur Recherche bei Onknel google: "vba, Funktionen mit Parameterübergabe"
klick doch einfach mal im Menü oben auf Excel-Materialien.
gruß
rb
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige