Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
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

Druckertausch - Makro läuft nicht mehr

Druckertausch - Makro läuft nicht mehr
Bernd
Hallo,
ich habe meinen Samsung CLP-300 gegen einen CLP-310 getauscht und nun kann ich nicht mehr drucken. Der Drucker ansich funktioniert, aber mein per Button aufzurufendes DRUCKEN-Makro startet nicht.
Infos:
Der neue Drucker ist der Standard-Drucker
In der 11. Zeile (Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:") habe ich CLP-300 schon gegen CLP-310 getauscht, aber dennoch wird nicht gedruckt.
Der Druck über Datei/Drucken bzw. das Druck-Icon funktioniert.
Weiß jemand, was ich am Makro ändern muß?
Ein Problem ist auch, daß die Datei mehrere Personen nutzen bzw. ausdrucken. Ich hatte vor etlichen Monaten extra 5 gleiche Drucker gekauft und stehe nun zusätzlich vor dem Problem, daß drei Personen noch einen CLP-300 haben, zwei Personen aber einen CLP-310 bekommen haben, da die alten Drucker "auf" waren.
Vielleicht kann mir jemand helfen ?!?
Schöne Grüße
Junker

Sub Drucken()
Dim objWks As Worksheet, strAktiverDrucker As String, objZelleKopie As Range
Dim lngFarbeKopie As Long
On Error GoTo Fehler
Set objWks = Worksheets("Angebot")
Set objZelleKopie = objWks.Range("F26") 'Zelle zur Kennzeichnung der Kopie
lngFarbeKopie = objZelleKopie.Interior.ColorIndex 'Originalfarbe merken
'Drucken
strAktiverDrucker = Application.ActivePrinter 'aktiven Druckermerken
'Drucker für Ausgabe setzen, falls nicht der Aktive Drucker genommen werden soll
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
If objWks.Shapes("Kontrollkästchen 5").ControlFormat.Value = 1 Then
'Kunden-Exemplar
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 25").ControlFormat.Value = 1 Then
'Kopie - Kunde
objZelleKopie = "K O P I E"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 8").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 6 'gelb
objZelleKopie = "KOPIE - Produktion"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 29").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 3 'rot
objZelleKopie = "KOPIE - Tourenplanung"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 28").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 40 'hellgrau
objZelleKopie = "KOPIE - Ablage/Koffer"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 31").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 4 'grün
objZelleKopie = "KOPIE - Provisionsabrechn."
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 32").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 4 'grün
objZelleKopie = "KOPIE - Steuerberater"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 34").ControlFormat.Value = 1 Then
'Kopie - Produktion
objZelleKopie.Interior.ColorIndex = 4 'grün
objZelleKopie = "KOPIE - Zahlungsverkehr"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 6").ControlFormat.Value = 1 Then
'Kopie - Vertrieb
objZelleKopie.Interior.ColorIndex = 37 'hellblau
objZelleKopie = "KOPIE - Vertrieb"
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 36").ControlFormat.Value = 1 Then
'Kopie - Vertrieb
objZelleKopie.Interior.ColorIndex = 33 'blau
objZelleKopie = "KOPIE - Lieferschein etc."
'   objWks.PrintPreview
objWks.PrintOut
End If
If objWks.Shapes("Kontrollkästchen 7").ControlFormat.Value = 1 Then
'Exemplar - Allgemeine Ablage
objZelleKopie.Interior.ColorIndex = 33 'blau
objZelleKopie = "KOPIE - Gesamt-Ordner"
'   objWks.PrintPreview
objWks.PrintOut
End If
'  If objWks.Shapes("Kontrollkästchen 75").ControlFormat.Value = 1 Then
'    'PDF-Datei erstellen
'    'FarbeZelle zurücksetzen
'    objZelleKopie.Interior.ColorIndex = lngFarbeKopie
'    objZelleKopie.MergeArea.ClearContents
'    'PDF-Drucker auswählen
'    Application.ActivePrinter = "Acrobat PDFWriter auf LPT1:"
'    objWks.PrintOut
'  End If
Fehler:
If Err.Number  0 Then
If Err.Number = 1004 Then
'do nothing
Else
MsgBox "Fehler Nr. " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
End If
End If
'FarbeZelle zurücksetzen
If Not objZelleKopie Is Nothing Then
objZelleKopie.Interior.ColorIndex = lngFarbeKopie
objZelleKopie.MergeArea.ClearContents
End If
'Drucker zurücksetzen
If strAktiverDrucker  "" Then Application.ActivePrinter = strAktiverDrucker
End Sub


AW: Druckertausch - Makro läuft nicht mehr
Jogy
Hi.
Gib im Direktfenster mal
?ActivePrinter
ein und übernimm die Ausgabe.
Gruss, Jogy
AW: Druckertausch - Makro läuft nicht mehr
Bernd
Jogy, Du meinst im Blatt STRG+G und dort ?ActivePrinter + OK?
Dann kommt die Fehlermeldung "Bezug ist ungültig".
AW: Druckertausch - Makro läuft nicht mehr
Bernd
Sorry, ich muß ja erstmal in die Entwicklungsumgebung ...
Wenn ich also dort im Direktfenster ?ActivePrinter eingebe, kommt eine Fehlermeldung:
Fehler beim Kompilieren:
Erwartet: Zeilennummer oder Sprungmarke oder Anweisung oder Anweisungsende

Keine Ahnung, was das zu bedeuten hat, da ich von VBA keinen blassen Schimmer habe.
AW: Druckertausch - Makro läuft nicht mehr
Jogy
Ja, im VBE in dem mit "Direktbereich" bezeichneten Fenster. Seltsam... ist überhaupt ein Standarddrucker vorhanden (ja, ich weiß, geht eigentlich nicht anders). Oder mach mal
?Application.ActivePrinter
Alternativ kannst Du mal den Drucker verstellen und dann mit angeschalteter Makroaufzeichnung den Drucker wieder zurückstellen. In dem aufgezeichneten Makro steht dann auch der Name.
Gruss, Jogy
Anzeige
AW: Druckertausch - Makro läuft nicht mehr
Bernd
Jetzt wird mir etwas angezeigt:
Samsung CLP-310 Series auf Ne05:
Und da liegt auch nun der Hase begraben:
Wenn ich nun
Samsung CLP-300 Series auf Ne00: (alt)
gegen
Samsung CLP-310 Series auf Ne05: (neu)
ersetze, funktioniert das Makro wieder.
Aber:
Bei meiner Excel-Datei handelt es sich um eine Eingabemaske, um Angebote, Aufträge und Rechnungen zu schreiben. Das Ganze ist als XLT-Datei abgespeichert. Wenn ich nun die oben beschrieben Änderung vornehmen würde, würde der Druck auf den beiden Rechnern funktionieren, die einen CLP-310 angeschlossen haben. Aber die anderen drei Personen mit einem "alten" CLP-300 könnten nicht drucken.
Und nun?
Drei weitere Drucker kaufen?
Anzeige
Anmerkung
Bernd
Anmerkung:
Den Code hat man mir ja damals hier im Board zusammengestrickt und irgendwie frage ich mich gerade, ob da nicht irgendwo ein Denkfehler drin steckt:
So sieht der bisherige Code aus:
strAktiverDrucker = Application.ActivePrinter 'aktiven Druckermerken
'Drucker für Ausgabe setzen, falls nicht der Aktive Drucker genommen werden soll
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
Ich habe zwar generell keinen Plan von VBA, würde das aber wie folgt interpretieren:
Zeile 1: Der Variabel strAktiverDrucker wird der Standard-Drucker des PCs zugewiesen
Zeile 2: ist nur eine Bemerkung
Zeile 3: der aktive Drucker soll der Samsung CLP-300 Series auf Ne00 sein
Ist das nicht unlogisch? Erst sage ich, erst weise ich der Variabel den Standard-Drucker zu, sage aber anschließend, daß der aktive Drucker zwingend ein Bestimmter sein soll?
Ich meine mich aber noch flüchtig daran erinnern zu können, daß das damals schon einen bestimmten Grund hatte ... ?!!
Anzeige
AW: Druckertausch - Makro läuft nicht mehr
Tino
Hallo,
Du vergibst den Druckerport fest, es kann aber vorkommen dass nach jeder neuen Anmeldung dieser neu zugewiesen wird.
Teste mal mit diesem Makro ob der Druckername stimmt.
kommt als Code in Modul1
Option Explicit 
 
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias _
  "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, _
  ByVal lpValueName As String, lpcbValueName As Long, ByVal _
  lpReserved As Long, lpType As Long, lpData As Byte, _
  lpcbData As Long) As Long 
 
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
  Alias "RegOpenKeyExA" (ByVal hKey As Long, _
  ByVal lpSubKey As String, ByVal ulOptions As Long, _
  ByVal samDesired As Long, phkResult As Long) As Long 
 
Private Declare Function RegCloseKey Lib "advapi32.dll" _
  (ByVal hKey As Long) As Long 
 
Private Const KEY_ENUMERATE_SUB_KEYS = &H8 
Private Const KEY_NOTIFY = &H10 
Private Const KEY_QUERY_VALUE = &H1 
Private Const READ_CONTROL = &H20000 
Private Const KEY_READ = (READ_CONTROL Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) 
Private Const HKEY_CURRENT_USER = &H80000001 
Private Const Schlüsselname = "Software\Microsoft\Windows NT\CurrentVersion\Devices\" 
 
 
 
Private Function FindDrucker(ByVal sDruckerName$) As String 
 
Dim dummy, hwndSchlüssel& 
Dim Länge&, lngIndex& 
Dim strFeld As String, lngLänge As Long 
Dim arrPuffer() As Byte, strPuffer As String 
Dim lngArrLänge As Long, lngPortlänge As Long 
Dim Drucker As String 
 
  dummy = RegOpenKeyEx(HKEY_CURRENT_USER, _
    Schlüsselname, 0&, KEY_READ, hwndSchlüssel) 
  If dummy <> 0 Then MsgBox "Falscher Schlüssel": Exit Function 
  strFeld = String(1024, 0) 
  lngLänge = 1023 
  Redim arrPuffer(0 To 1000) 
   
  Do While RegEnumValue(hwndSchlüssel, lngIndex, _
    strFeld, lngLänge, 0&, ByVal 0&, ByVal 0&, ByVal 0&) = 0 
     
    Drucker = Left$(strFeld, lngLänge) & " auf " 
    lngArrLänge = 1024 
     
    RegEnumValue hwndSchlüssel, lngIndex, strFeld, _
      lngLänge, 0&, 0&, arrPuffer(0), lngArrLänge 
     
    strPuffer = (StrConv(arrPuffer, vbUnicode)) 
     
    lngPortlänge = InStr(1, strPuffer, ":") - InStr(1, strPuffer, ",") 
     
    strPuffer = Mid$(strPuffer, InStr(1, strPuffer, ":") - 4, lngPortlänge) 
    strPuffer = Replace(strPuffer, ",", "") 
    strPuffer = IIf(Right$(strPuffer, 1) = ":", strPuffer, strPuffer & ":") 
    Drucker = Drucker & strPuffer 
     
    If Drucker Like sDruckerName Then FindDrucker = Drucker: Exit Do 
    lngIndex = lngIndex + 1 
    strFeld = String(1024, 0) 
     
    lngLänge = 1023 
  Loop 
 
  dummy = RegCloseKey(hwndSchlüssel) 
End Function 
 
Sub TestDruckerSuchen() 
Dim sDrucker As String 
 
'Drucker Suchen, Platzhalter verwenden 
sDrucker = FindDrucker("*CLP-310*") 
 
If sDrucker <> "" Then 
    MsgBox sDrucker 
Else 
    MsgBox "Drucker nicht gefunden!" 
End If 
 
End Sub 


Gruß Tino

Anzeige
AW: Druckertausch - Makro läuft nicht mehr
Bernd
Tino, in Modul1 ist aber bereits mein DRUCKEN-Makro.
Soll ich Deinen Code einfach unten anfügen?
füg ein neues Modul ein owT
Rudi
hohle eine neue Datei
Tino
Hallo,
Ist nur zum testen, hohle eine neue Datei.
Gruß Tino
AW: hohle eine neue Datei
Bernd
Okay, neue Mappe erstellt, neues Modul eingefügt, Dein Code eingefügt,
Fehlermeldung:
Fehler beim Kompilieren:
Sub oder Function nicht definiert

Markiert ist REPLACE bei
strPuffer = Replace(strPuffer, ",", "")
da fehlen betimmt Verweise
Tino
Hallo,
schau mal im VBA Editor unter Extras Verweise ob diese Verweise gesetzt sind.
Visual Basic For Applications
Microsoft Excel 12.0 Object Library (Nummer ist Versionsabhängig)
Gruß Tino
Anzeige
AW: da fehlen betimmt Verweise
Bernd
Die kommen dort an den beiden ersten Stellen und sind angehakt.
hier ein Beispiel
Tino
Hallo,
habe Dir hier mal ein Beispiel aufgebaut.
Tabellennamen habe ich jetzt nicht an Dein Makro angepasst.
Vor dem Ausdruck wird eine Meldung ausgegeben, die kannst du im Code später wieder löschen.
Es wird nach einem Drucker mit gesucht der "CLP-3" im Namen enthält, kann also CLP-300 oder CLP-310 heißen.
https://www.herber.de/bbs/user/62841.xls
Sollte dies bei Dir nicht gehen, weis ich auch nicht wie ich Dir noch helfen kann!
Gruß Tino
Anzeige
AW: hier ein Beispiel
Bernd
Es kommt wieder die gleiche Fehlermeldung mit markiertem REPLACE in
strPuffer = Replace(strPuffer, ",", "")
AW: hier ein Beispiel
Tino
Hallo,
schreibe mal bei Dir zuvor VBA. also
strPuffer = VBA.Replace(strPuffer, ",", "")
Gruß Tino
AW: hier ein Beispiel
Hajo_Zi
Hallo Bernd,
oder benutze Application.WorksheetFunction.Substitute() dann ist es auch für Version 97 geeignet.

AW: hier ein Beispiel
Bernd
Danke, aber da ich generell keine Ahnung von VBA habe, weiß ich leider nicht, WAS ich WO einfügen/ändern soll. Sorry ...
versuche es mal so.
Tino
Hallo,
das Replace in V97 nicht gibt habe ich nicht gewusst.
ersetze die Zeile
Replace(strPuffer, ",", "")
durch diese
strPuffer = Application.WorksheetFunction.Substitute(strPuffer, ",", "")
Gruß Tino
Anzeige
AW: versuche es mal so.
Hajo_Zi
Hallo Tino,
Replace gibt es schon nur dort wird es anders eingesetzt.
Gruß Hajo
ok. danke Hajo, habe kein V 97 oT.
Tino
AW: hier ein Beispiel
Bernd
Gleicher Fehler :-(
versuche mal den vorschlag von Hajo. oT.
Hajo.
AW: Druckertausch - Makro läuft nicht mehr
Bernd
Scheinbar gibt es keine Lösung für mein Problem, so daß ich nun drei weitere CLP-310 bestellt habe.
Dennoch ein GROSSES DANKESCHÖN an diejenigen, die mir weiterhelfen wollten.
Junker
was geht jetzt nicht?
Tino
Hallo,
Gibst du immer so schnell auf ?
Gruß Tino
und noch was...
Tino
Hallo,
, wenn nun Deine schönen neuen Drucker an einem anderen Port liegen,
stehst Du wieder vor dem gleichen Problem.
Gruß Tino
AW: und noch was...
Bernd
Nein, eigentlich gebe ich nicht so schnell auf.
Aber es geht ja um die Abläufe für meinen Arbeitgeber. Und dem kann ich schlecht erklären, warum ich einen ganzen damit verbringe, irgendwelche Druckerprobleme zu lösen.
--------------------------
Ich habe jetzt mal Deinen gestrigen Vorschlag getestet
Hallo,
das Replace in V97 nicht gibt habe ich nicht gewusst.
ersetze die Zeile
Replace(strPuffer, ",", "")
durch diese
strPuffer = Application.WorksheetFunction.Substitute(strPuffer, ",", "")
Gruß Tino

Wenn ich nun auf den Button "Drucken" klicke, kommt die Meldung
Der Drucker 'Samsung CLP-310 Series auf Ne00:' wurde gefunden.
Interessant, gestern war er doch noch auf Ne05; geändert wurde aber nichts.
Wenn ich nach der Meldung auf OK klicke, komme ich in den Editor und mit wird der Laufzeitfehler 9 angezeigt ... "Index außerhalb des gültigen Bereichs".
Anzeige
AW: und noch was...
Tino
Hallo,
wenn es Deinem Arbeitgeber lieber ist neue Drucker zu kaufen um danach festzustellen,
dass es immer noch nicht geht.
"Interessant, gestern war er doch noch auf Ne05; geändert wurde aber nichts"
Wie kannst Du den Druckerport ändern,
dieser wird doch normalerweise beim Start automatisch vergeben.
Wo bekommst Du die Fehlermeldung in welcher Zeile?
Gruß Tino
AW: und noch was...
Bernd
Hallo,
wenn es Deinem Arbeitgeber lieber ist neue Drucker zu kaufen um danach festzustellen,
dass es immer noch nicht geht.

Prinzipiell kann ich ja drucken.
Bloß die Eingabemaske wird nun an zwei verschiedenen Druckern benutzt:
Samsung CLP-300 und Samsung CLP-310
Per VBA müßte ja nur der Standard-Drucker automatisch benutzt werden.
strAktiverDrucker = Application.ActivePrinter 'aktiven Druckermerken
'Drucker für Ausgabe setzen, falls nicht der Aktive Drucker genommen werden soll
Application.ActivePrinter = "Samsung CLP-300 Series auf Ne00:"
Wenn ich die letzte Zeile löschen, wird nichts gedruckt.
Ändere ich CLP-300 auf CLP-310, könnte ich drucken, aber dann die anderen nicht mehr
----------
"Interessant, gestern war er doch noch auf Ne05; geändert wurde aber nichts"
Wie kannst Du den Druckerport ändern,
dieser wird doch normalerweise beim Start automatisch vergeben.

Ich habe nichts geändert. Vielleicht liegt es ja daran, daß ich gestern den neuen Drucker angeschlossen habe und seitdem den Rechner nicht neu gestartet hatte. Heute morgen ist der Drucker jedenfalls am Druckport Ne00
----------
Wo bekommst Du die Fehlermeldung in welcher Zeile?
Im Modul 2 in Zeile 17
Set objWks = Worksheets("Angebot")
Mein logisches Verständnis sagt mir, daß das eben logisch sein muß, denn ich habe ja kein Blatt mit dem Namen "Angebot" ... zumindest nicht in Deiner Beispielarbeitsmappe.
----------
Gruß Tino
Danke, daß Du noch dabie bist ;-)
Anzeige
habe Deine Datei nicht nachgebaut.
Tino
Hallo,
ist logisch, Du solltest schon Deine Datei mit diesen Makros verwenden.
Wenn es die Tabelle Angebot nicht gibt, kommt es zum Fehler.
Also die kompletten Codezeilen in die Module kopieren, die Massage Box die ich eingebaut habe ist nur zur Kontrolle ob der richtige Drucker gefunden wird, diese kannst Du wieder raus löschen.
Gruß Tino
AW: habe Deine Datei nicht nachgebaut.
Bernd
Yes, funktioniert auf beiden Druckern.
Ich hatte nicht bedacht, daß Du daß Drucken-Makro auch geändert hattest.
Auf jeden Fall habe ich diese PRIVATE DECLARE FUNCTION in meiner Arbeitsmappe eingebaut und es auf beiden Druckern getestet. Läuft einwandfrei (bis jetzt).
BESTEN DANK, Tino .... den anderen Helfern ebenfalls.
Gruß
Junker
super bis zum nächsten mal. oT.
Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige