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, 8955 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
Dublikate Entfernen per Excel Makro VBA
gelöst Frage von novregenMicrosoft Office3 Kommentare

Hallo, ich habe eine Excel Liste mit variabler Zeilenanzahl und 33 Spalten. Diese Liste bekomme ich monatlich. Leider gibt ...

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. ...

Neue Wissensbeiträge
Humor (lol)
Und wie seid Ihr gegen Cyberattacken gewappnet?
Information von DerWoWusste vor 1 TagHumor (lol)5 Kommentare

aber wo ist der Hammer? :-)

Sicherheit
Ein weiterer Microsoft-Stirnklatscher
Information von DerWoWusste vor 2 TagenSicherheit7 Kommentare

Habe gerade einen Artikel zu einem Sicherheitsproblem gefunden, welches mir zu seiner Zeit (gepatcht 2015) wohl durchgerutscht ist. Es ...

Windows 10
Upgradepfade Windows 10 LTSC
Erfahrungsbericht von Datenreise vor 2 TagenWindows 10

Nur eine kurze Info, für diejenigen, die es interessiert, da es hierzu im Netz aus nachvollziehbaren Gründen nicht allzu ...

Administrator.de Feedback
Wartungsarbeiten heute Nacht (Update)
Information von Frank vor 2 TagenAdministrator.de Feedback10 Kommentare

Hallo User, durch Umbauarbeiten in unserem Rechenzentrum (am Backbone) kann es heute Nacht (14-15.01.2019) zu kurzen Ausfällen unserer Seite ...

Heiß diskutierte Inhalte
Microsoft
SFirm 4.0 auf Terminalserver startet für jeden angemeldeten Benutzer diverse Dienste
Frage von Frank84Microsoft25 Kommentare

Hallo zusammen, wir verwenden Sfirm 4.0 auf einem Terminalserver (der SQL Server ist auf einem separaten Server), das Problem ...

Windows 10
Windows 10 - kein Boot mehr nach Domänenaustritt
gelöst Frage von Ghost108Windows 1025 Kommentare

Hallo zusammen, habe hier eine Windows 10 Maschine, die ich gerne aus der Domäne austreten lassen möchte. Nach Austritt ...

Windows 10
VM wächst schnell von 14 auf 35 GB an - warum?
Frage von degudejungWindows 1018 Kommentare

Hallo, ich bin ein Freund schlanker VMs und setze daher gerne mit dem Erscheinen einer neuen Win10 Version - ...

Internet
Google-Suchergebnisse, Schnelleinblendung, woher kommt der Inhalt?
gelöst Frage von departure69Internet17 Kommentare

Hallo. Ich bin der Systembetreuer einer kleinen Gemeinde in Süddeutschland. Wir betreiben auch eine Leihbücherei. Eine Kundin hat letzten ...