Autor
|
Thema: Application.ActivePrinter (16452 mal gelesen)
|
Martin_0103 Mitglied
Beiträge: 181 Registriert: 05.02.2003 3,4 GHz - Quadro 4000 - 12 GB RAM - WIN7 - IV2010 SP3
|
erstellt am: 13. Mrz. 2007 14:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich habe vor einiger Zeit folgendes Macro erstellt: Code: Sub freepdfdrucken() Range("A1").Select Application.ActivePrinter = "FreePDF XP auf Ne02:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "FreePDF XP auf Ne02:", Collate:=True End Sub
Es funktioniert super auf meinem PC. Auf einem Anderen jedoch nicht! Folgende Fehlermeldung erscheint: Laufzeitfehler 1004: Die Methode 'ActivePrinter' für das Objekt '_Application' ist fehlgeschlagen Geh ich auf Debuggen wird die Zeile: Application.ActivePrinter = "FreePDF XP auf Ne02:" gelb markiert. Die Rechner sind "normal" identisch - der FreePDF XP Drucker existiert auch - ein manuelles Drucken funktioniert! Steh voll auf dem Schlauch... Danke für die Hilfe Gruß Martin ------------------ Wenn man einen Hund so dressiert hat, dass er über einen See fliegt, dann gibt es sicher ein paar Neider die das Tier für Wasserscheu halten... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oberli Mike Ehrenmitglied V.I.P. h.c. Dipl. Maschinen Ing.
Beiträge: 3728 Registriert: 29.09.2004 Excel 2010 128GB SSD Windows 7
|
erstellt am: 13. Mrz. 2007 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für Martin_0103
Zitat: Original erstellt von Martin_0103: Application.ActivePrinter = "FreePDF XP auf Ne02:"
Zeichne das Makro mal auf einem anderen PC auf, und du wirst sehen, dass das Ne02 sich ändern wird...... hab aber keine Ahnung wieso, und wie man es ändern kann. Hab für diesen Zweck, als ich es brauchte eine Abfrage durchlaufen lassen, welche von 01 bis xx lief, und prüfte ob es richtig ist, um dann die richtig Nummer einzugeben. Würde mich auch freuen, wenn es eine einfachere Lösung gibt. Hier mal mein Makro um den Drucker umzustellen.
*************************************************** Sub Drucker_umstellen() anz = 0 For anz = 1 To 20 On Error GoTo 0 On Error Resume Next Err.Clear If anz < 10 Then Application.ActivePrinter = _ "\\BUSS\PRLJPZ-1102.PRT.PR.BUSS auf Ne0" & anz & ":" Else Application.ActivePrinter = _ "\\BUSS\PRLJPZ-1102.PRT.PR.BUSS auf Ne" & anz & ":" End If Next anz Drucker = Application.ActivePrinter If Left(Drucker, 18) <> "\\BUSS\PRLJPZ-1102" Then MsgBox ("Drucker nicht umgestellt") End If End Sub *********************************************************** anschliessend kann man einfach mit den aktuellen Drucker ausdrucken. Gruss Mike ------------------
The Power Of Dreams Schreib mal wieder Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 13. Mrz. 2007 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für Martin_0103
Hallo, "Application.ActivePrinter" liefert bei mir den Standarddrucker. Ist das jeweils der gleiche auf beiden Rechnern? [thedit] Ich war wohl etwas voreilig, da ihr ja beide zuweist und nicht abfragt - darauf bezieht sich meine Zeile oben. Allerdings meine ich, eine zweifache Zuweisung herauszulesen? Ungetestet lese ich bei Martin Code: ... Application.ActivePrinter = "FreePDF XP auf Ne02:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="FreePDF XP auf Ne02:", C...
und frage mich, ob das erforderlich ist? Der ActivePrinter ist doch nach der ersten Zeile schon klar? Nur so am Rande...Solange es sich nicht um 1.000 Rechner handelt, würde ich den Macro-Recorder auf der anderen Kiste anwerfen und sehen, was dann drinsteht; oder auf Nepumuks Beitrag verweisen, siehe unten ;-). [/thedit] Gruß, Frederik [Diese Nachricht wurde von Paulchen am 13. Mrz. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 13. Mrz. 2007 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für Martin_0103
Hallo Martin, so kommst du an deine Drucker: Code: Option ExplicitPrivate Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long) As Long Private Const MAX_PRINTERS = 32& Private strPrinterNames(MAX_PRINTERS) As String Private strPrinterDrivers(MAX_PRINTERS) As String Private strPrinterPorts(MAX_PRINTERS) As String Private intPrinterCount As Integer Public Sub prcGetPrinterList() Dim strBuffer As String Dim intIndex As Integer strBuffer = Space$(&H2000) GetProfileString "PrinterPorts", vbNullString, "", _ strBuffer, Len(strBuffer) prcGetPrinterNames strBuffer prcGetPrinterPorts For intIndex = 0 To intPrinterCount - 1 Debug.Print strPrinterNames(intIndex), _ strPrinterPorts(intIndex), _ strPrinterDrivers(intIndex) Next End Sub Private Sub prcGetPrinterNames(ByVal strBuffer As String) Dim intIndex As Integer Dim strName As String intPrinterCount = 0 Do intIndex = InStr(strBuffer, Chr(0)) If intIndex > 0 Then strName = Left$(strBuffer, intIndex - 1) If Len(Trim$(strName)) > 0 Then strPrinterNames(intPrinterCount) = Trim$(strName) intPrinterCount = intPrinterCount + 1 End If strBuffer = Mid$(strBuffer, intIndex + 1) Else If Len(Trim$(strBuffer)) > 0 Then strPrinterNames(intPrinterCount) = Trim$(strBuffer) intPrinterCount = intPrinterCount + 1 End If strBuffer = "" End If Loop While (intIndex > 0) And (intPrinterCount < MAX_PRINTERS) End Sub Private Sub prcGetPrinterPorts() Dim strBuffer As String Dim intIndex As Integer For intIndex = 0 To intPrinterCount - 1 strBuffer = Space$(&H400) GetProfileString "PrinterPorts", strPrinterNames(intIndex), "", _ strBuffer, Len(strBuffer) prcGetDriverAndPort strBuffer, strPrinterDrivers(intIndex), _ strPrinterPorts(intIndex) Next End Sub Private Sub prcGetDriverAndPort(ByVal Buffer As String, _ DriverName As String, PrinterPort As String) Dim intDriver As Integer Dim intPort As Integer DriverName = "" PrinterPort = "" intDriver = InStr(Buffer, ",") If intDriver > 0 Then DriverName = Left$(Buffer, intDriver - 1) intPort = InStr(intDriver + 1, Buffer, ",") If intPort > 0 Then PrinterPort = Mid$(Buffer, intDriver + 1, _ intPort - intDriver - 1) End If End If End Sub
------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin_0103 Mitglied
Beiträge: 181 Registriert: 05.02.2003 3,4 GHz - Quadro 4000 - 12 GB RAM - WIN7 - IV2010 SP3
|
erstellt am: 13. Mrz. 2007 16:04 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten... @:Nepumuk WOW ... ich muss schon sagen, so viele Zeilen erschlagen mich! Ich vergaß zu sagen, dass ich von VBA keine Ahnung habe! Mein bischen Wissen hab ich mir zusammen kopiert! Die Exceltabelle soll lediglich mittels dem Makro auf jedem PC mit dem "FreePDF XP Drucker" gedruckt werden. Gibt es da etwas einfaches, bzw. wohin mit den Zeilen? Gruß Martin
------------------ Wenn man einen Hund so dressiert hat, dass er über einen See fliegt, dann gibt es sicher ein paar Neider die das Tier für Wasserscheu halten... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 13. Mrz. 2007 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für Martin_0103
Hallo Martin, ist doch ganz einfach, nur die eine Routine ein bisschen angepasst: Code: Public Sub prcGetPrinterList() Dim strBuffer As String Dim intIndex As Integer Dim blnFound As Boolean strBuffer = Space$(&H2000) GetProfileString "PrinterPorts", vbNullString, "", _ strBuffer, Len(strBuffer) prcGetPrinterNames strBuffer prcGetPrinterPorts For intIndex = 0 To intPrinterCount - 1 If strPrinterNames(intIndex) = "FreePDF XP" Then Application.ActivePrinter = strPrinterNames(intIndex) & " auf " _ & strPrinterPorts(intIndex) blnFound = True Exit For End If Next If Not blnFound Then MsgBox "Drucker nicht gefunden", vbExclamation, "Hinweis" End Sub
Zitat: Ich vergaß zu sagen, dass ich von VBA keine Ahnung habe!
Wie kommst du dann auf die Idee VBA zu benutzen? Ich habe keine Ahnung vom Spaceshuttlefliegen. Darum würde ich das auch nie machen, selbst wenn ich eines in der Garage stehen hätte. ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oberli Mike Ehrenmitglied V.I.P. h.c. Dipl. Maschinen Ing.
Beiträge: 3728 Registriert: 29.09.2004 Excel 2010 128GB SSD Windows 7
|
erstellt am: 13. Mrz. 2007 17:18 <-- editieren / zitieren --> Unities abgeben: Nur für Martin_0103
Hallo Nepumuk, Genau wie Martin hab ich auch mal angefangen. Ein Makro in Excel aufgezeichnet, geschaut wie der Quelltext aussieht, andere Makros analysiert und so weiter. Ist doch schön wenn jemand sich in ein solches Thema einfinden will. BTW: Es genügend User, welche es nicht hinbekommen ein PDF zu erstellen (PDF ist natürlich installiert). Wir haben auch solche in der Firma. Somit kann ich die Überlegung von einem Makro verstehen. Gruss Mike ------------------
The Power Of Dreams Schreib mal wieder Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin_0103 Mitglied
Beiträge: 181 Registriert: 05.02.2003 3,4 GHz - Quadro 4000 - 12 GB RAM - WIN7 - IV2010 SP3
|
erstellt am: 14. Mrz. 2007 07:16 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Nepumuk: Hallo Martin,ist doch ganz einfach, nur die eine Routine ein bisschen angepasst: Wie kommst du dann auf die Idee VBA zu benutzen? Ich habe keine Ahnung vom Spaceshuttlefliegen. Darum würde ich das auch nie machen, selbst wenn ich eines in der Garage stehen hätte.
Hallo Nepumuk, herzlichen Dank für die Anpassung, werde sie später versuchen. Über Deinen Vergleich mit dem "Fliegen" mußte ich herzhaft lachen... und das am frühen Morgen ich denke aber mal, wenn es in Deiner Garage stehen würde - würdest Du es sicherlich mal brummen lassen. Danke nochmals... Ergänzung: Das Makro hängt sich mit der Zeile auf: GetProfileString -> Fehler beim Kompilieren !? Gruß Martin
------------------ Wenn man einen Hund so dressiert hat, dass er über einen See fliegt, dann gibt es sicher ein paar Neider die das Tier für Wasserscheu halten... [Diese Nachricht wurde von Martin_0103 am 14. Mrz. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 14. Mrz. 2007 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für Martin_0103
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|