Drucken per vba
#1
So liebe Gemeinde,
ich hoffe ich stell mich nicht allzu doof an und beschreibe mein Problem korrekt, weil es mein erster eintrag in einem solchem Forum ist.

Ich habe 2 Probleme Problem:

1. beim ersten ausführen der Datei läuft alles super das dokument wird im Hintergrund geöffnet, die Daten werden eingetragen, das Dokument wird gedruckt und das Dokument wird im Hintergrund wieder geschlossen.
Es läuft also alles unsichtbar und gut.


beim zweitem ausführen jedoch läuft der Prozess zwar auch sauber durch jedoch öffnet sich die Word datei Sad). dann muss die manuell geschlossen werden.Beim nächsten mal bleibt sie wieder zu.
Also bei jedem 2tem mal passiert das und ich habe keine Ahnung warum .

2. ich schaffe es nicht dem Word Dokument mitzuteilen das es nur die erste Seite drucken soll, weil wenn ich unten bei .printout Page:=1 hinzufügen macht der drucker nämlich garnichts mehr.
was aber funktioniert ist wenn ich .printout copies:=2 schreibe druckt er das dokument doppelt aus .

ich hoffe einer von euch kann mi helfen, denn ich verzweifle daran..

LG und vielen Dank im Vorrraus!



Code:
Private Sub CommandButton8_Click()

Userform1.Show vbModeless

Dim wrdApp As Object
Dim wrdDoc As Object
Dim appWord As Object
Dim doc As Object
On Error Resume Next
Set appWord = GetObject(, "Word.Application")
If Err.Number <> 0 Then Set appWord = CreateObject("Word.Application")

Set doc = appWord.Documents.Open("C:\schlüssel\Schließberechtigung.docx")

'definieren zum schreiben nach word
Dim m As Variant
Dim ma As Variant
Dim n As Variant
Dim na As Variant
Dim o As Variant
Dim oa As Variant
Dim p As Variant
Dim pa As Variant
Dim q As Variant
Dim qa As Variant
Dim r As Variant
Dim ra As Variant

   
   'Multiline in Textbox anschalten
   doc.formfields.MultiLine = True

   'Inhalte aus Zellen in Worddatei einfügen
   
   doc.formfields("Text1").result = Worksheets("Tabelle1").TextBox1.Value
   m = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("m2:m22"))
   doc.formfields("Text2").result = Join(m, Chr(13))
   ma = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("m23:m37"))
   doc.formfields("Text3").result = Join(ma, Chr(13))
   n = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("n2:n22"))
   doc.formfields("Text4").result = Join(n, Chr(13))
   na = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("n23:n30"))
   doc.formfields("Text5").result = Join(na, Chr(13))
   o = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("o2:o22"))
   doc.formfields("Text6").result = Join(o, Chr(13))
   oa = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("o23:o25"))
   doc.formfields("Text7").result = Join(oa, Chr(13))
   p = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("p2:p11"))
   doc.formfields("Text8").result = Join(p, Chr(13))
   pa = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("p12"))
   doc.formfields("Text9").result = Join(pa, Chr(13))
   q = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("q2:q20"))
   doc.formfields("Text10").result = Join(q, Chr(13))
   qa = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("q21"))
   doc.formfields("Text11").result = Join(qa, Chr(13))
   r = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("r2:r4"))
   doc.formfields("Text12").result = Join(r, Chr(13))
   ra = WorksheetFunction.Transpose(Worksheets("tabelle2").Range("r5"))
   doc.formfields("Text13").result = Join(ra, Chr(13))


doc.PrintOut ((Pages:=1))
Set wrdDoc = Nothing
Set wrdApp = Nothing
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Close

Dim WsShell
Dim intText As Integer
Set WsShell = CreateObject("WScript.Shell")
intText = WsShell.Popup("Schließberechtigung erstellt.", 3, "Automatisch...")
End Sub
Top
#2
Hallo, :19:

zu 1:

Du kannst nicht erst die Variablen auf "Nothing" setzen und dann ".Close". Schreibe vor den Nothing, aber nach PrintOut :


Code:
doc.Close False ' Dokument Schließen ohne speichern
wrdApp.Quit ' Wordapplikation beenden

Was soll "Set wrdDoc = Nothing"? Deine Variable heißt doch "doc". :21:

Zu 2:

etwa so:


Code:
doc.PrintOut Range:=4, Pages:="1"
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • Gast_derverzweifelt
Top
#3
Danke hat alles super geklappt!

ich hab mich da beim umschreiben wohl ein bisschen vertippt .

kannst du mir auch erklären warum ich da bei printout nen range von 4 setzen muss?


LG und nochmals danke
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste