Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBA Papierschacht mit Makro wählen

Mitglied: Hatl

Hatl (Level 1) - Jetzt verbinden

01.08.2006, aktualisiert 03.08.2006, 9120 Aufrufe, 4 Kommentare

Hallo!

Ich möchte eine Wordvorlage (*.dot) erstellen welche später von einem Programm mit Daten gefüllt wird. In dieser Wordvorlage muss definiert werden, dass die erste Seite immer aus der 2 Lade gedruckt wird und der Rest immer aus der ersten Lade.
Über Datei -> Seite einrichten -> Format funktioniert es nicht da es auf unterschiedlichen Druckern (zwar alles Kyocera aber unterschiedliche Modelle) und somit mit unterschiedlichen Ladenbezeichnungen funktionieren muss.
Also wird mir nichts anderes überbleiben als ein Makro zu schreiben, welches die Ladenbezeichnung und die interne Ladennummer ermittelt.
Hab im Netzt gesucht und folgendes relativ kompliziertes Makro gefunden:

Public Const DC_BINNAMES = 12
Public Const DC_BINS = 6
Declare Function DeviceCapabilities Lib "winspool.drv" Alias _
"DeviceCapabilitiesA" (ByVal lpDeviceName As String, _
ByVal lpPort As String, ByVal iIndex As Long, _
ByVal lpOutput As Long, ByVal lpDevMode As Long) As Long
Public Type Zufuhr
Nummer As Integer
Name As String * 24
End Type
Public Function HolePapierfaecher(drucker As Printer, _
faecher() As Zufuhr) as Long
Dim devicename As String, portname As String
Dim rc As Long, i As Long
Dim bins() As Integer
Dim binnames As String
If drucker Is Nothing Then
devicename = ""
portname = ""
Else
devicename = drucker.devicename
portname = drucker.port
End If
If devicename = "" Or portname = "" Then
MsgBox "Ausgewaehlter Drucker nicht gefunden!", _
vbCritical + vbOKOnly, App.ProductName
HolePapierfaecher = 0
Exit Function
End If
rc = DeviceCapabilities(devicename, portname, DC_BINS, 0, 0)
If rc = 0 Then
MsgBox "Ausgewaehlter Drucker nicht gefunden!", _
vbCritical + vbOKOnly, App.ProductName
HolePapierfaecher = 0
Exit Function
End If
ReDim bins(1 To rc)
rc = DeviceCapabilities(devicename, portname, DC_BINS, VarPtr(bins(1)), 0)
binnames = String(24 * rc, Chr(0))
rc = DeviceCapabilities(devicename, portname, DC_BINNAMES,
StrPtr(binnames), 0)
binnames = StrConv(binnames, vbUnicode)
ReDim faecher(1 To rc)
HolePapierfaecher = rc
For i = 1 To rc
faecher(i).Nummer = bins(i)
faecher(i).Name = Mid(binnames, ((i - 1) * 24) + 1, 24)
If InStr(1, faecher(i).Name, Chr(0)) > 0 Then
faecher(i).Name = Left(faecher(i).Name, _
InStr(1, faecher(i).Name, Chr(0)) - 1)
End If
Next
End Function

Meinen Frage jetzt dazu, wo im VB-Editor gehört das hin? Ich hab es in ein Modul geschrieben, aber jetzt muss ich die Funktion im "ThisDocument" aufrufen, wie macht man das? Bzw. hat jemand eine Idee wie man das einfacher machen könnte?
Ich steh da auf "der Leitung"

Vielen Dank!!

mfg
Mitglied: AndreasHoster
01.08.2006 um 16:54 Uhr
Prinzipiell kommt es ins Document_Open Ereignis rein, damit beim Öffnen des Dokuments die Daten gesetzt werden (im VBA Editor auf ThisDocument, dann beim Code-Editor Teil einfach
Private Sub Document_Open()
REM Hier Funktion aus Modul aufrufen
End Sub
eingeben

Ich sehe nur ein Problem, Du setzt beim Öffnen dann die Werte ein. Wenn jetzt jemand über Datei -> Drucken einen anderen Drucker auswählt, stehen falsche Werte drin. Oder hat jeder User nur einen Drucker zugeordnet?
Bitte warten ..
Mitglied: Hatl
01.08.2006 um 17:06 Uhr
Hallo!

Erstmal Danke für die Antwort!

Also die Funktion selbst kommt also in ein Modul.
Der Aufruf kommt ins Document open.
Ist das soweit richtig?

Aber wie schaut der Aufruf aus? Was muss ich effektiv hinschreiben damit die Funktion aufgerufen wird. Vorallem wie werden die Paramter angegeben?

Die Funktion ist so definiert:
Public Function HolePapierfaecher(drucker As Printer, faecher() As Zufuhr) as Long

Den Aktuellen Drucker könnte ich ermitteln und als Paramter übergeben aber "faecher" soll in der Funktion ja ermittelt werden.


Stimmt es passt dann nur für den Drucker der beim öffnen eingestellt war, aber das genügt den das Dokument soll eh immer am Standarddrucker ausgedruckt werden, bei den anderen gibts keine Laden.

Danke!

mfg
Bitte warten ..
Mitglied: Hatl
02.08.2006 um 11:10 Uhr
Hab es hin bekommen, der Aufruf schaut natürlich so aus:

Dim var() As Zufuhr
Dim drucker As String
Dim out As Variant
drucker = ActivePrinter

out = HolePapierfaecher(drucker, var())

Da stand ich wohl wirklich auf der Leitung.

Vielen Dank!
Bitte warten ..
Mitglied: Hatl
03.08.2006 um 15:17 Uhr
Hallo nochmal!

Nachdem die Auswahl der Papierschächte nun wunderbar funktioniert, wäre es ja doch einen gute Verbesserung wenn die Schächte auch stimmen wenn ein User den Drucker ändert.
Es könnte ja eigentlich doch vorkommen das ein user mal auf einen anderen Drucker als seinen Standard drucken möchte.

Also müste ich irgendwie mitbekommen wenn der User den Drucker ändert und dann das Makro nochmal ausführen, geht das?

Momentan hab ich den Funktionsaufruf (HolePapierfaecher) im Document_New() hier werden dann auch die ermittelten Daten aus der Funktion verarbeitet und die entsprechenden Werte für die Papierschächte gesetzt. Das ganze Dokument ist einen *.dot.
Somit wird das Makro immer dann ausgeführt wenn ein neues auf dieser Vorlage basierendes Dokument erzeugt wird.
Aber wie kann ich das Makro bzw. die Sub Document_New() ausführen wenn der User einen anderen Drucker einstellt?

Vielen Dank!

mfg
Bitte warten ..
Ähnliche Inhalte
VB for Applications
VBA-Makro verschwindet nach Speichern
gelöst Frage von lupi1989VB for Applications5 Kommentare

Liebe Leute, bei mir verschwindet der Makro für den Scrollbereich in Excel(abgespeichert in xlsm) immer wieder nach dem Speichern. ...

Microsoft Office

Excel Makro VBA Sortierung nach Spaltennamen

gelöst Frage von easy4breezyMicrosoft Office3 Kommentare

Hi Leute, ich habe mich hier schon eingelesen und auch im Internet, aber irgendwie komme ich zu keiner Lösung ...

Microsoft Office

Passwortgeschützte Excel Dateien bearbeiten VBA Makro

Frage von schwalbepilotMicrosoft Office2 Kommentare

Ich möchte Fußzeilen in alle Excel Dateien eines Ordners einfügen. Das klappt alles soweit, leider sind alle Dateien passwortgeschützt. ...

LAN, WAN, Wireless

Wahl d. Subnetz

gelöst Frage von PharITLAN, WAN, Wireless3 Kommentare

Hallo allerseits, vielleicht such ich aus der falschen Richtung, komme aber nicht weiter. Wie und warum wählt Ihr Eure ...

Neue Wissensbeiträge
Humor (lol)

"Linux und 5 Gründe Warum man kein Windows verwenden sollte sondern Ubuntu Linux"

Tipp von Snowbird vor 1 TagHumor (lol)8 Kommentare

Gerade gefunden. Ja, ist etwas älter, aber irgendwie lustig?

Humor (lol)

"Warum Linux in einer vernetzten Welt einfach keinen Komfort bietet!"

Tipp von Snowbird vor 1 TagHumor (lol)13 Kommentare

Ein interessanter Einblick warum Linux nichts für Geräteübergreifende Arbeit ist :)

Humor (lol)
Zuviel Speicher ist ungesund. :-)
Tipp von Lochkartenstanzer vor 2 TagenHumor (lol)17 Kommentare

Moin Kollegen, Heute hatte ich ein ungewöhnliches Aha-Erlebnis: Über das Wochenende habe ich einen einen 6 Jahre alten Bare-Metal ...

Windows Update

KB4517297 verfügbar, behebt Fehler in VB6 VBA VBScript

Information von sabines vor 2 TagenWindows Update

Das Update behebt mögliche Fehler in VB6, VBA und VBScript, die durch das Update KB4512486 vom August entstanden sind. ...

Heiß diskutierte Inhalte
Router & Routing
Deinstalliertes Geräte wird in FritzBox noch immer als verbundenes Gerät angezeigt
gelöst Frage von imebroRouter & Routing18 Kommentare

Hallo, in meiner FritzBox 7490 wird im Bereich "Funknetz" ein Gereät bei den verbundenen Geräten angezeigt, wobei ich nicht ...

Windows 10
Windows 10 druckt nicht mehrere Kopien?
Frage von StefanKittelWindows 1014 Kommentare

Hallo, ich hatte gerade einen Anruf eines Kunden. Sein neuer PC (Win 10 1903) druckt nicht mehr mehrere Seiten ...

Sonstige Systeme
Ist es möglich ein ISDN-Telefon an einen analogen Anschluss anzuschließen?
Frage von cramtroniSonstige Systeme14 Kommentare

Also anders herum geht es ja, da gibt es ja diese Adapter von RJ11 auf TAE-F, aber gibt es ...

Windows Server
Nachfolger von Windows Home Server?
gelöst Frage von SnowbirdWindows Server13 Kommentare

Hallo, gibt es eigentlich ein Nachfolger von Windows Home Server oder etwas vergleichbares? Snowbird