Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

WORD-Etikettendruck von Accessdatei aus steuern

Begonnen von mariposas, April 14, 2014, 20:10:16

⏪ vorheriges - nächstes ⏩

mariposas

Ich möchte Etiketten, die im Word-Format vorliegen, je nach Bedarf von Access aus drucken. Der jeweilige Bedarf wird in einer Accessdatei ermittelt. Habe geringe Programmierkenntnisse und bitte um Hilfe

database

Guten Tag!

ZitatDer jeweilige Bedarf wird in einer Accessdatei ermittelt
In welcher Form und mit welchen Parametern?

mariposas

Es handelt sich um eine einfache Datei, aus der die erforderliche Anzahl an Etikettenbögen hervorgeht.

database

Na dann - probiern wir's ...

Erzeuge auf deinem Formular einen Button, z.B. cmdEtikettendruck
In dessen Klick-Ereignis legst du folgenden Code:


Private Sub cmdEtikettendruck_Click()

     Dim anzahl as Integer, i as Integer
     'Dim DocVariable as String
     Dim objWord As Word.Application

     anzahl = Me!DeinFormFeldMitDerAnzahlDerAusdrucke
     'DocVariable = ErmittlungDesDateinamens
     Set objWord = CreateObject("Word.Application")

     With objWord
         .Visible = True
         'das zu öffnende Worddokument
         'Wenn es unterschiedliche Dateien gibt,
         'muss die entsprechende Datei durch eintraqen der DocVariable
         'zwischen den Klammern ohne die Gänsefüße erfolgen
         .Documents.Open ("C:\DeinVerzeichnis\DeineEtikettendatei.doc")
         
         For i = 1 To anzahl
         .ActiveDocument.PrintOut     'x mal ausdrucken
         Next i

     End With
     
     'Etikettendatei unverändert lassen und nicht speichern
     objWord.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
     objWord.Quit
     Set objWord = Nothing

End Sub


HTH

p.s. der Code ist NICHT getestet!

mariposas

Den Code habe ich mehr oder weniger so schon getestet, und er funktioniert auch. Mein Problem ist: es gibt viele unterschiedliche Etiketten-Word.DOCs, die je nach Bedarf gedruckt werden sollen. Die erforderliche Anzahl erhalte ich aus der Access-Datei; was mir fehlt, ist der Code, der nacheinander die einzelnen Word-Dateien öffnet, bis die Access-Datei abgearbeitet ist.

database

Hallo,

na du bist gut ...

Zitat von: mariposas am April 14, 2014, 20:30:00
Es handelt sich um eine einfache Datei, aus der die erforderliche Anzahl an Etikettenbögen hervorgeht.

und....

Zitatwas mir fehlt, ist der Code, der nacheinander die einzelnen Word-Dateien öffnet, bis die Access-Datei abgearbeitet ist.

Was ist unter 'Access-Datei abgearbeitet' zu verstehen?
Und woher kommen die Dateinamen? Sind die in einer Tabelle gespeichert,
wie hängt die Anzahl mit den Dateien zusammen ... ?
Wenn du konkretere Angaben machst kann ich dir auch konkreter helfen - wahrscheinlich ;)

mariposas

Sorry, ist ja klar. Manchmal stecke ich drin und setze Dinge voraus, die so gar nicht klar sein können.
In der Accessdatei sind die Namen der Word-DOCs gespeichert sowie die Anzahl der zu druckenden Exemplare. Diese Access-Datei muss nun Datensatz für Datensatz bis zum Ende aufgerufen und die WORD-Dateien entsprechend oft gedruckt werden.
Beispiel:
Name             Anzahl
WORD1.DOC      0
WORD2.DOC      10
WORD3.DOC      2
etc.

database

#7
OK, besser wird' nicht ...  ;)

Ich nehme also an, dass ALLE deine Dateien im gleichen Verzeichnis zu finden sein werden.
Ich nenne deine Tabelle (das ist es nämlich und keine Access-Datei) der Einfachheit halber 'tblTabelle'.

Als erstes musst du die gesamte Tabelle in Recordset laden:

Set rst = CurrentDB.OpenRecordset("SELECT DName, AAnzahl FROM tblTabelle WHERE AAnzahl > 0")

Danach wird dieses Recordset schrittweise durchlaufen und die Ausdrucke abgerufen.
Versuche den untenstehenden geänderten Code:


Private Sub cmdEtikettendruck_Click()

     Dim anzahl as Integer, i as Integer
     Dim DocVariable as String
     Dim objWord As Word.Application
     Dim rst As DAO.Recordset
     
     Set rst = CurrentDB.OpenRecordset("SELECT DName, AAnzahl FROM tblTabelle WHERE AAnzahl > 0")

     Set objWord = CreateObject("Word.Application")
     
     Do While Not rst.EOF
     
         DocVariable = rst!DName
         anzahl = rst!AAnzahl

         With objWord
             .Visible = True
             .Documents.Open ("X:\DeinVerzeichnis\" & DocVariable)
         
             For i = 1 To anzahl
                 .ActiveDocument.PrintOut     'x mal ausdrucken
             Next i

            .ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
        End With
        rst.MoveNext
    Loop
     
     objWord.Quit
     Set objWord = Nothing
     Set rst = Nothing

End Sub



Auch dieser Code ist nicht getestet!

HTH

p.s. Name und Anzahl sind denkbar schlechte Feldbezeichnungen in einer Access-Tabelle, es handelt sich dabei um reservierte Worte!
Ich habe daher vorsorglich diese Spaltenbezeichnungen geändert (DName und AAnzahl)

mariposas

Vielen Dank, Peter, für Deine Mühen!
Ich teste es und melde mich wieder
Burkhard

database

Hi,
gerne!

Ändere deine Feldbezeichnungen die Spaltennamen!

mariposas

Es funktioniert!
Ich musste nur eine Kleinigkeit ändern:
Bei Dim objWord As Word.Application kommt eine Fehlermeldung
Mit Dim objWord As Object geht es.
Vielen Dank !!!

database

Freut mich!

ZitatBei Dim objWord As Word.Application kommt eine Fehlermeldung
Ja, da müsstest du den Verweis auf die Word-Objekte unter 'Extras' --- 'Verweise' im VBE setzen - sorry, habe ich vergessen zu erwähnen.


Setze bitte den Thread auf gelöst!

DANKE