ich bräuchte noch einmal Euere Hilfe bei meinem immer noch nicht gelösten Problem [ :-((((], wie man dem Nutzer bei einer Userform in einem xl-AddIn die Möglichkeit bieten kann, den Drucker zu konfigurieren. Andre, Nepumuk und Ralf Sögel waren schon so nett, sich Gedanken zu diesem Problem zu machen und haben ein Paar Tipps gegeben. Tatsächlich dachte ich urspünglich auch, mit Andres Tipp:
Public Sub CommandButton3_Click()
Dialogs(xlDialogPrinterSetup).Show
End Sub
eine Lösung gefunden zu haben, nachdem der Aufruf des Druckermenüs auf die Weise erstmals gelang. Richtigerweise ist es jedoch so, daß der Aufruf dann, aber auch nur dann klappt, wenn neben dem xla AddIn zugleich eine weitere normale (leere) Arbeitsmappe geöffnet. In diesem Fall funktioniert aber auch der Befehl Dialogs(xlDialogPrint).Show.
Daß bei Aufruf des Druckertreibers eine weitere Arbeitsmappe geöffnet sein muß, wäre per se zwar vielleicht etwas unschön, ließe sich aber mit Neuanlage einer normalen Arbeitsmappe bei Aufruf des xla vertretbar lösen. Das Problem ist vielmehr, daß sich alle über den Druckerdialog vorgenommenen Einstellungen entsprechend auch automatisch nur auf diese Arbeitsmappe beziehen. Alle meine Versuche, die Einstellungen im Druckmenü auf die wks im xla zu beziehen, indem ich die auszudruckenden wks im xla vor Aufruf des Druckermenüs zu selecten, zu aktivieren und was auch immer sonst versuchte, sind bislang gescheitert.
Z.B. produziert... :
Public Sub CommandButton3_Click()
ThisWorkbook.Sheets("Antrag").Range("A1").Select
Application.Dialogs(xlDialogPrinterSetup).Show
ThisWorkbook.Worksheets("Antrag").Range("A1:J67").PrintOut From:=1, To:=1, Copies:=1
End Sub
... in Zeile 2 den Laufzeitfehler 1004 "Die Select-Methode des Range-Objekts ist fehlerhalft".
Und auch der Vorschlag von Ralf Sögel, Thisworkbook einfach durch Activeworkbook zu ersetzen, ist natürlich nicht zielführend. Denn Activeworkbook ist ja gerade nicht das gewünschte wks im xla, sondern die angezeigte leere normale xls-Arbeitsmappe. Daher kassiert man bei...:
Public Sub CommandButton3_Click()
ActiveWorkbook.Sheets("Antrag").Range("A1").Select
Application.Dialogs(xlDialogPrinterSetup).Show
ThisWorkbook.Worksheets("Antrag").Range("A1:J67").PrintOut From:=1, To:=1, Copies:=1
End Sub
...nur Laufzeitfehler 9 ("außerhalb des Index"). :-((((((((((((((
Auch bringt es nichts, einfach vor Aufruf des Druckmenüs einen Wert im gewünschten Druck-wks des xla festzulegen, also z.B.:
Public Sub CommandButton3_Click()
ThisWorkbook.Sheets("Antrag").Range("A1").value = "Test"
Application.Dialogs(xlDialogPrinterSetup).Show
ThisWorkbook.Worksheets("Antrag").Range("A1:J67").PrintOut From:=1, To:=1, Copies:=1
End Sub
Zwar setzt die Routine brav das "Test" in A1 ein, ruft den druckerdialog auf. Aber alle Einstellungen beziehen sich wiederum nur auf die geöffnete normale xls-Datei. *wein*
Hat irgend jemand noch eine Idee, wie man diese Problem lösen kann???? Oder muß ich einfach akzeptieren, daß man den Druckerdialog nicht auf ein in einem xla integriertes Worksheet anwenden kann? Seltsam, daß man ja trotzdem die im xla enthaltenen wks ausdrucken kann. Wahrscheinlich geht es irgendwie doch. Aber ist wohl ziemlich kompliziert.
Daß ich unbedingt ein xla und kein xls verwenden möchte, hat seinen Hintergrund darin, daß ich den Zugriff auf die Tabellenblätter selbst verhindern möchte, um Manipulationen der sensiblen Daten in den wks-Formularen nach Möglichkeit auszuschließen. Ich weiß, daß man das auch durch einen Workaround aus screenupdating = false / xlveryhidden / kurzeitigem Einblenden / Druckmenü aufrufen / Drucken / wieder ausblenden auch lösen könnte. Aber das scheint mir keinen wirklich brauchbaren Schutz zu bieten und wäre wirklich nur die allerletzte Notlösung. Vielleicht hat aber jemand noch eine Idee, wie man den Zugriff und Ansicht der auszudruckenden wks auf andere Weise halbwegs zuverlässig unterbinden kann? Leider besteht auch nicht die Möglichkeit, den Nutzer auf die Option der Änderung der Standardeinstellungen des jeweiligen Druckers hinzuweisen, da diese Option für die normalen User durch die schlauen Netzwerkheinis deaktiviert ist.
Vielen Dank nochmals an Andre, Nepumuk und Ralf Sögel für die bisherigen Tipps, Danke für jeden neuen Vorschlag und viele Grüße
Björn