Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
912to916
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
912to916
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Abfrage Druckanzahl bei BeforePrint

Abfrage Druckanzahl bei BeforePrint
05.10.2007 16:22:46
Tanja
05.10.2007
Hallo, Leute,
ich habe folgendes Problem (da leider meine Excel-VBA-Kenntnisse eher sehr bescheiden sind).
Ich benötige für eine Excel-Datei eine Möglichkeit, dass vor dem Drucken der Windows-User abgefragt wird und entsprechend bei einem bestimmten User für ein Register (mehrere Seiten, Druckbereich ist festgelegt, über eine benutzerdefinierte Ansicht) Zeilen ausgeblendet werden und nicht mitgedruckt werden sollen. Danach soll das Arbeitsblatt wieder auf die ursprüngliche Ansicht zurückgestellt werden.
Soweit habe ich es, denke ich, auch schon gut hinbekommen, allerdings soll die Anzahl der zu druckenden Exemplare abgefragt werden.
Da der Beginn, den ich verwende "Private Sub Workbook_BeforePrint(Cancel As Boolean)", bereits den Druck an sich auslöst, wird die Abfrage, wieviel Exemplare gedruckt werden sollen, zweimal angezeigt, obwohl man eine Anzahl drin hat und auf OK geklickt hat.
Ich möchte aber die Abfrage nur einmal sehen und wenn eine Anzahl drin ist, soll die Anzahl der Exemplare gedruckt werden. Außerdem soll, wenn kein Zahlwert enthalten ist, oder auf "Abbrechen" geklickt wird, die gesamte Aktion (das Drucken) abgebochen werden (mit der Meldung, siehe Code).
Anbei der Code, ich hoffe, jemand von euch VBA-Cracks kann mir helfen - in der Hilfe und im Online-Forum (und bei der Suche allgemein im Netz) habe ich leider nichts entsprechendes gefunden, was mir auf die Sprünge hilft. Der Code ist im Objekt "Diese Arbeitsmappe".

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim AnzahlDrucke As String
Dim User As String
On Error GoTo Test_Err
If Environ("User") Like "*muster*" = True Then ActiveWorkbook.CustomViews("Test 728  _
ausgeblendete Zeilen").Show
Worksheets("test 728").Activate
AnzahlDrucke = Application.InputBox("Bitte Anzahl der gewünschten Drucke angeben", "Anzahl   _
_
der gewünschten Drucke", "1")
ActiveWindow.SelectedSheets.PrintOut , Copies:=AnzahlDrucke, Collate:=True
Exit Sub
Test_Err:
Select Case Err.Number
Case 1004
MsgBox "Sie haben keine Zahl eingegeben oder 'Abbrechen' angeklickt. Die Aktion wird  _
abgebrochen."
If AnzahlDrucke = "Falsch" Then Cancel = True
If AnzahlDrucke = "" Then Cancel = True
Exit Sub
End Select
Resume Next
If Application.UserName Like "*meier*" = False Then ActiveWorkbook.CustomViews("Test728").  _
_
Show
End Sub


Das Problem ist vermutlich die Zeile " ActiveWindow.SelectedSheets.PrintOut , Copies:=AnzahlDrucke, Collate:=True", die dürfte eigentlich nicht hier stehen, ich weiß aber nicht, wie ich sonst die Anzahl der Drucke abfragen soll.
Ich hoffe, ich habe mich verständlich ausgedrückt (und keinen Quatsch geschrieben). Vielen Dank schon einmal im Voraus für eure Hilfe,
bis dann, Grüsse aus Berlin an alle Excel-/VBA-"Freaks",
Tanja

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

Betreff
Datum
Anwender
Anzeige
AW: Abfrage Druckanzahl bei BeforePrint
05.10.2007 19:13:14
Tino
Hallo Tanja,
vielleicht geht es so (ungetestet)

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim AnzahlDrucke As String
Dim User As String
Dim Druck As Boolean
On Error GoTo Test_Err
If Druck = False Then Cancel = True 'Drucken unterbinden
If Environ("User") Like "*muster*" = True Then ActiveWorkbook.CustomViews("Test 728  _
ausgeblendete Zeilen").Show
Worksheets("test 728").Activate
AnzahlDrucke = Application.InputBox("Bitte Anzahl der gewünschten Drucke angeben", "Anzahl  _
der gewünschten Drucke", "1")
Druck = True 'Druck wieder zulassen
ActiveWindow.SelectedSheets.PrintOut , Copies:=AnzahlDrucke, Collate:=True
Exit Sub
Test_Err:
Select Case Err.Number
Case 1004
MsgBox "Sie haben keine Zahl eingegeben oder 'Abbrechen' angeklickt. Die Aktion wird  _
abgebrochen."
If AnzahlDrucke = "Falsch" Then Cancel = True
If AnzahlDrucke = "" Then Cancel = True
Exit Sub
End Select
Resume Next
If Application.UserName Like "*meier*" = False Then ActiveWorkbook.CustomViews("Test728"). _
Show
End Sub


Gruss
Tino

Anzeige
AW: Abfrage Druckanzahl bei BeforePrint
05.10.2007 22:06:00
Ramses
Hallo
Da ist ein grundsätzlicher Fehler drin
Es muss heissen:
If Environ("Username") Like "*muster*" Then
Gruss Rainer

Aw: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
06.10.2007 00:38:00
Tanja
Hallo, Tino,
erst einmal vielen Dank, den von Ramses bezeichneten Fehler ("username", Danke für den Hinweis) habe ich korrigiert, aber auch mit der von dir beschrieben Variante wird die InputBox zweimal aufgerufen, das soll ja nicht sein.
Hat vielleicht noch jemand eine zündende Idee?
Tanja

AW: Aw: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
06.10.2007 08:23:21
Tino
Hallo,
jetzt sollte es funktionieren

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim AnzahlDrucke As String
Dim User As String
Dim Druck As Boolean
On Error GoTo Test_Err
If Druck = False Then Cancel = True 'Drucken unterbinden
If Environ("User") Like "*muster*" = True Then ActiveWorkbook.CustomViews("Test 728  _
ausgeblendete Zeilen").Show
Worksheets("test 728").Activate
If Druck = True Then
AnzahlDrucke = Application.InputBox("Bitte Anzahl der gewünschten Drucke angeben", "Anzahl  _
der gewünschten Drucke", "1")
End If
Druck = True 'Druck wieder zulassen
ActiveWindow.SelectedSheets.PrintOut , Copies:=AnzahlDrucke, Collate:=True
Exit Sub
Test_Err:
Select Case Err.Number
Case 1004
MsgBox "Sie haben keine Zahl eingegeben oder 'Abbrechen' angeklickt. Die Aktion wird  _
abgebrochen."
If AnzahlDrucke = "Falsch" Then Cancel = True
If AnzahlDrucke = "" Then Cancel = True
Exit Sub
End Select
Resume Next
If Application.UserName Like "*meier*" = False Then ActiveWorkbook.CustomViews("Test728").  _
_
Show
End Sub


Gruss
Tino

Anzeige
AW: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
06.10.2007 15:37:02
Tanja
Hallo, Tino,
Danke für deine Mühe, leider klappt´s so auch nicht. Auf meinem XP-Rechner wird so gar nichts aufgerufen, es gibt den Laufzeitfehler 1004 (vermutlich, weil "Environ" auf XP nicht funzt) und auf meinem 98er Notebook wird die InputBox gar nicht mehr aufgerufen, es kommt gleich die Meldung, "Sie haben auf Abbrechen .." also auch Laufzeitfehler 1004.
Ich denke, ich müsste irgendwie das "Private Sub Workbook_BeforePrint(Cancel As Boolean)" mit der Anzahl der Drucke verbinden, weil ich ja so im Endeffekt mit meinem ursprünglichen Code den Druck-Aufruf zweimal starte (einmal mit "Private Sub Workbook_BeforePrint" und einmal mit " ActiveWindow.SelectedSheets.PrintOut , Copies:=AnzahlDrucke, Collate:=True").
Aber wie könnte ich sonst die Anzahl der gewünschten Drucke (zwischen 1 und 50) abfragen?
Gibt es vielleicht noch einen anderen Weg, wenn die Druckroutine aufgerufen wird, ein Makro automatisch starten zu lassen?
Grüsse aus Berlin, Tanja

Anzeige
AW: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
06.10.2007 17:23:00
Tino
Hallo,
eigentlich soll durch If Druck = False Then Cancel = True der Ausdruck bei drücken auf Drucken
abgebrochen werden. Vor dem Druckbefehl im Code wird Druck auf True gesetzt und dieser Ausdruck nicht abgebrochen.
Die Anweisung Environ("User") Like "*muster*" kenne ich nicht,
sollte diese aber den Usernamen abfragen, so würde ich dass so machen.
(User Name steht in Excel unter Extras - Optionen - Allgemein)
If Application.UserName = "Tino" Then _
ActiveWorkbook.CustomViews("Test 728 ausgeblendete Zeilen").Show

Es besteht aber auch die Möglichkeit den Angemeldeten System User auszugeben!
Nocheinmal der Code mit Application.UserName:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim AnzahlDrucke As String
Dim User As String
Dim Druck As Boolean
On Error GoTo Test_Err
If Druck = False Then Cancel = True 'Drucken unterbinden
If Application.UserName = "muster" Then ActiveWorkbook.CustomViews("Test 728 ausgeblendete  _
Zeilen").Show
Worksheets("test 728").Activate
If Druck = False Then
AnzahlDrucke = Application.InputBox("Bitte Anzahl der gewünschten Drucke angeben", "Anzahl  _
der gewünschten Drucke", "1")
End If
Druck = True 'Druck wieder zulassen
ActiveWindow.SelectedSheets.PrintOut , Copies:=AnzahlDrucke, Collate:=True
Exit Sub
Test_Err:
Select Case Err.Number
Case 1004
MsgBox "Sie haben keine Zahl eingegeben oder 'Abbrechen' angeklickt. Die Aktion wird  _
abgebrochen."
If AnzahlDrucke = "Falsch" Then Cancel = True
If AnzahlDrucke = "" Then Cancel = True
Exit Sub
End Select
Resume Next
If Application.UserName = "muster" Then ActiveWorkbook.CustomViews("Test728").Show
End Sub


MfG
Tino

Anzeige
AW: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
07.10.2007 12:38:46
Ramses
Hallo
"...(User Name steht in Excel unter Extras - Optionen - Allgemein)..."
Das ist falsch.
Dort steht der "Name" der bei der Installation angegeben wird. Das hat mit dem am Computer angemeldeten User gar nichts zu tun.
Das geht nur mit "Environ("Username")
Gruss Rainer

AW: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
07.10.2007 18:03:24
Tanja
Hallo, Tino, hallo, Ramses,
erst einmal vielen Dank, dass ihr euch mit meinem Problem beschäftigt und für eure Hilfe.
Zum Application.User: Es ist leider wirklich, wie Ramses schreibt, der Name, der entweder bei der Installation von Office/Excel eingetragen wurde, bzw. der Eintrag, den man selbst unter Extras - Optionen-Register Allgemein unten unter "Benutzername" eingetragen hat-dieser Eintrag wird bei allen vom jeweiligen "Autor" erstellten Excel-Dateien in die Eigenschaften der erstellten Datei unter Register "Zusammenfassung" als Autor eingetragen, wäre also dann mein Name, bzw. der Name unserer DV-Mitarbeiterin, die die Datei in unser System reingebracht hat (schon geprüft) und der Name bleibt ja auch, es sei denn, jemand überschreibt ihn und dieser Eintrag nutzt mir nichts. Das war auch meiner erste Idee, aber das bringt es nicht. Da wir auf Arbeit mit dem Windows 2000 Server arbeiten, muss ich den Windows-Anmeldenamen abfragen. Mit 'Environ ("Username")' kann man Betriebssystemvariablen abfragen.
Als selbstständiges Makro funktioniert´s, aber ich will es ja ausführen lassen, wenn der User den Druckvorgang ausführt.
Das Problem scheint, das jeweils einmal mit dem Druck auf den Drucker (bzw. Datei-Drucker) als auch mit Workbook BeforePrint insgesamt zweimal der Druckvorgang ausgelöst wird, bzw. die InputBox aufgerufen wird. Ich müsste also irgendwie Workbook BeforePrint mit der Anzahl der Drucke verbinden und den quasi 2. Druckaufruf unterdrücken. Ich finde aber keinen Weg, bei Workbook BeforePrint die Anzahl der gewünschten Drucke mit aufzunehmen. Ich werde heute und morgen nochmal mit Tino´s Einfall testen, eventuell gibt´s ja dabei den springenden Punkt und gebe spätestens am Dienstag Rückmeldung.
Ich wünsche noch einen schönen restlichen Sonntag, Tanja

Anzeige
AW: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
07.10.2007 21:19:00
Josef
Hallo Tanja,
probier mal so.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim AnzahlDrucke As Variant

If Environ("UserName") Like "*muster*" Then
    
    AnzahlDrucke = Application.InputBox("Bitte Anzahl der gewünschten Drucke angeben", _
        "Anzahl der gewünschten Drucke", "1")
    
    If AnzahlDrucke = "Falsch" Then
        MsgBox "Abbrechen gedrückt", vbInformation, "Hinweis"
        Cancel = True
        Exit Sub
    End If
    
    If AnzahlDrucke > 0 And AnzahlDrucke < 56 Then
        On Error Resume Next
        ActiveWorkbook.CustomViews("Test 728 ausgeblendete Zeilen ").Show
        Application.EnableEvents = False
        Cancel = True
        Worksheets("test 728").PrintOut , Copies:=AnzahlDrucke, Collate:=True
        Application.EnableEvents = True
    Else
        MsgBox "Keine oder zu viele Kopien", vbInformation, "Hinweis"
        Cancel = True
        Exit Sub
    End If
    
    ActiveWorkbook.CustomViews("Test728").Show
    
End If

End Sub

Gruß Sepp

Anzeige
AW: Abfrage Druckanz. b.BeforePrint x2Aufruf Input
09.10.2007 09:20:39
Tino
Hallo Rainer,
ich habe ja auch geschrieben,

"Es besteht aber auch die Möglichkeit den Angemeldeten System User auszugeben!"

und unter Allgemein steht eben der Username sofern dieser nicht geändert wird.
Hallo Tanja,
habe noch diese möglichkeit um den System User abzufragen, kannst es ja versuchen einzubauen.


User = Sustem_User
'in ein Modul diese Funktion
Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" ( _
ByVal lpBuffer As String, nSize As Long) As Long
Function Sustem_User() As String
'Deklaration: Globale Prozedur-Variablen
Dim lngErgebnis As Long
Dim lngPuffer As Long
Dim strPuffer As String
Dim strUser As String
Dim strUsername As String
lngPuffer = 255
strUser = Space$(lngPuffer)
lngErgebnis = GetUserName(strUser, lngPuffer)
If lngErgebnis  0 Then
Sustem_User = Left(strUser, lngPuffer - 1)
End If
End Function


Gruss
Tino

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige