Automatisches Einlesen und Seriendruck

Hallo,

ich habe hier folgendes Problem:
Aus einer Anwendung (Datenerfassungsprogramm) werden Adressdaten ausgegeben.

Diese sollen auf ein Formular gedruckt werden (am Arbeitsplatzrechner).

Meine Idee: Die Datei wird in WORD geöffnet, in eine Tabelle umgewandelt und unter einem eindeutigen Namen gespeichert und geschlossen.
Es wird eine vorbereitete Word-Datei geöffnet, die mit Seriendruckfunktionen die Adresse aus der eben erstellten Datei in vordefinierte Textfelder schreibt. Diese Datei wird dann ausgedruckt.

Scheint alles zu funktionieren - allerdings möchte nun der Programmierer der Datenerfassungssoftware die Möglichkeit bereitgestellt bekommen, das durch Knopfdruck die Maschinerie in Gang gesetzt wird. Also: Der Anwender klickt und am Ende kommt der Druck raus.

Kann sowas mit VBA erledigt werden? Kennt oder hat jemand ähnliche Anforderungen??

Freue mich über hilfreiche Tipps

Frank

Hallo,

Ebenfalls Hallo!
Um Dir Hinweise zur Lösung geben zu können musst Du schon noch ein paar Hinweise geben.

ich habe hier folgendes Problem:
Aus einer Anwendung (Datenerfassungsprogramm) werden
Adressdaten ausgegeben.

Welche Anwendung? Welches Ausgabeformat? Unterstützt die Datenerfassungssoftware ODBC (o.ä.), so dass aus anderen Anwendungen heraus auf die Daten zugegriffen werden kann?

Diese sollen auf ein Formular gedruckt werden (am
Arbeitsplatzrechner).

Befindet sich die Datenbank woanders (Server, Internet)?

Meine Idee: Die Datei wird in WORD geöffnet, in eine Tabelle
umgewandelt und unter einem eindeutigen Namen gespeichert und
geschlossen.

nicht nur Wordtabellen können als Seriendruckquelle dienen …

Es wird eine vorbereitete Word-Datei geöffnet, die mit
Seriendruckfunktionen die Adresse aus der eben erstellten
Datei in vordefinierte Textfelder schreibt. Diese Datei wird
dann ausgedruckt

machbar

Scheint alles zu funktionieren - allerdings möchte nun der
Programmierer der Datenerfassungssoftware die Möglichkeit
bereitgestellt bekommen, das durch Knopfdruck die Maschinerie
in Gang gesetzt wird. Also: Der Anwender klickt und am Ende
kommt der Druck raus.

Was ich nicht verstehe, warum muss der Programmierer durch den Anwender einen Automatismus (Programmierung) zur Verfügung gestellt bekommen. Er ist doch selbst Programmierer und kennt seine Anwendung am besten. Oder habe ich da was falsch verstanden?

Kann sowas mit VBA erledigt werden? Kennt oder hat jemand
ähnliche Anforderungen??

Mit VBA kann man alles automatisieren, was man in der jeweiligen Anwendung manuell machen kann. Also müsste da was möglich sein.

Freue mich über hilfreiche Tipps

Die kommen nach weiteren Einblicken in die Problematik.

Frank

Gruß, tester

Hallo Tester,

danke für dein Interesse. Ich versuche mal ein wenig mehr zu schreiben …

Hallo,

Ebenfalls Hallo!
Um Dir Hinweise zur Lösung geben zu können musst Du schon noch
ein paar Hinweise geben.

ich habe hier folgendes Problem:
Aus einer Anwendung (Datenerfassungsprogramm) werden
Adressdaten ausgegeben.

Welche Anwendung? Welches Ausgabeformat? Unterstützt die
Datenerfassungssoftware ODBC (o.ä.), so dass aus anderen
Anwendungen heraus auf die Daten zugegriffen werden kann?

Es handelt sich um das Programm BLAISE - wird verwendet um mobile Datenerfassung zu ermöglichen. Die Daten werden in Form eines Interviews direkt in Fragebögen eingetippt, plausibilisiert etc.
Der Programmierer dieser Anwendung gibt die Daten in Form einer ASCII-Datei aus. Eine reine txt Datei wäre auch möglich.

Diese sollen auf ein Formular gedruckt werden (am
Arbeitsplatzrechner).

Befindet sich die Datenbank woanders (Server, Internet)?

Meine Idee: Die Datei wird in WORD geöffnet, in eine Tabelle
umgewandelt und unter einem eindeutigen Namen gespeichert und
geschlossen.

nicht nur Wordtabellen können als Seriendruckquelle dienen …

ja, access oder excel wäre auch möglich. es handelt sich aber immer nur um eine einzelne Adresse und die WORD-Lösung hat mir daher am besten gefallen.

Es wird eine vorbereitete Word-Datei geöffnet, die mit
Seriendruckfunktionen die Adresse aus der eben erstellten
Datei in vordefinierte Textfelder schreibt. Diese Datei wird
dann ausgedruckt

machbar

jaja, geht ja auch schon

Scheint alles zu funktionieren - allerdings möchte nun der
Programmierer der Datenerfassungssoftware die Möglichkeit
bereitgestellt bekommen, das durch Knopfdruck die Maschinerie
in Gang gesetzt wird. Also: Der Anwender klickt und am Ende
kommt der Druck raus.

Was ich nicht verstehe, warum muss der Programmierer durch den
Anwender einen Automatismus (Programmierung) zur Verfügung
gestellt bekommen. Er ist doch selbst Programmierer und kennt
seine Anwendung am besten. Oder habe ich da was falsch
verstanden?

sorry, hab ich mich falsch ausgedrückt. Der Programmierer arbeitet NUR in seiner BLAISE-Welt. Daher hat er mich gefragt, ob ich einen Automatismus (also Makro) anbieten kann. Er würde dann in seinem Programm einen Button unterbringen. Dann kann der User diesen Button (in BLAISE) klicken und das Makro nimmt seinen Lauf.

Kann sowas mit VBA erledigt werden? Kennt oder hat jemand
ähnliche Anforderungen??

Mit VBA kann man alles automatisieren, was man in der
jeweiligen Anwendung manuell machen kann. Also müsste da was
möglich sein.

Mittlerweile bin ich soweit, das alle Abfolgen tadellos funktionieren. Allerdings hab ich noch zwei Probleme: Beim Öffnen der ASC-Datei (über das Makro) erscheint die Frage, ob man wirklich öffnen möchte (Sicherheitsrisiko) - da muss der User dann manuell eingreifen. Ein zweites mal ist das der Fall, wenn über das Makro die Seriendruckdatei geöffnet wird - hier erscheint der Hinweis zur Verknüpfung mit der Datenquelle.
Diese beiden Meldungen würde ich gerne auch über das Makro „abarbeiten“

Freue mich über hilfreiche Tipps

Die kommen nach weiteren Einblicken in die Problematik.

Frank

wäre toll

Gruß, tester

Gruß
Frank

Hallo!

Dann bist Du ja schon relativ weit mit dem Code.

Zunächst einige Hinweise zu den noch offenen Fragen:

Warnungen und Meldungen die während der Ausführung von Code ausgegeben werden, kann man mit

Application.DisplayAlerts=wdAltersNone

ausblenden. (Verhalten analog Standardbutton klicken).

Nicht vergessen, die Anzeige der Warnmeldungen zum Schluss des Codes wieder einzuschalten

Application.DisplayAlerts=wdAlertsAll

Die SQL-Warnmeldung wird durch den Befehl zwar ausgeblendet aber leider wird als Standardaktion die Schaltfläche „Nein“ verwendet (also unbrauchbar).Hier gibt es noch die Möglichkeit die Registrierungseinstellungen zu ändern (sh.: http://mypage.bluewin.ch/reprobst/WordFAQ/MMData.htm… oder http://support.microsoft.com/kb/825765/de ), so dass die Meldung generell unterdrückt wird.

Sonstige Hinweise/Alternativen:

Überlege Dir, wo du den notwendigen Code unterbringst. Eine Möglichkeit wäre ein VBS-Script. Eine andere eine Ereignisprozedur („Document_Open“) in einem Worddokument, die bei Öffnen der Worddatei ausgeführt wird. Welche Variante Du wählst, hängt von den Möglichkeiten und der Programmiersprache der Erfassungssoftware ab.

Bei bestimmter Struktur der ASC-Ausgabedatei kann man diese direkt als Datenquelle an den Serienbrief binden. Das ist aber unter Anbetracht der unterschiedlichen verwendeten Zeichensätze mit Problemen behaftet, so dass die Umwandlung in das Wordformat vielleicht doch wirklich der bessere Weg ist.
In diesem Zusammenhang ist zu erwähnen, dass DOC-Daten für einen Serienbrief nicht zwingend in eine Word-Tabelle eingefügt sein müssen. Es reicht ein Trennzeichen (; oder Komma oder Tabulator) zwischen den Datenfeldern (Sofern die ASC-Datei schon eine solche Struktur hat, probier einfach mal die ASC-Datei in Word zu öffnen und ohne weitere Änderungen als Worddokument zur Verwendung als Datenquelle zu speichern)

Um Programmierarbeit zu sparen und keine zusätzliche Dateien anlegen zu müssen, würde ich jedoch testweise die direkte Anbindung der ASC-Datei in Rohform wie oben erwähnt einfach mal probieren. Dazu bei Auswahl der Datenquelle Dateityp auf „alle Dateien (*.*)“ und die ASC-Datei auswählen. Falls dies funktioniert kann man die Anbindung mit dem Makrorekorder aufzeichnen und den Code wie gewünscht anpassen.

Da es sich bei der Ausgabe um eine ASC-Datei handelt, vermute ich, dass der ASCII-Zeichensatz (DOS) und nicht der windowstypische ANSI-Zeichensatz verwendet wird. Wenn dies der Fall ist, kann es Probleme bei der Darstellung von Umlauten oder Sonderzeichen in Word geben (probieren!). Eine Konvertierungsmöglichkeit der ASC-Datei in für Word problemlos nutzbare Dateien (txt-Ansi-Dateien oder auch DOC-Dateien) bietet der Code unter http://mypage.bluewin.ch/reprobst/WordFAQ/MMAuto.htm… .
Dieser kann entsprechend Deinen Bedürfnissen angepasst werden, z.B. so, dass der Name der Quelldatei nicht abgefragt sondern übergeben wird und dass ohne weitere Abfrage eine vorgegebene Konvertierung erfolgt.

Alternative:

Ohne Serienbrief gäbe es noch die Möglichkeit die ASC-Datei per VBA auszulesen [Stichworte: CreateObject(„Scripting.FileSystemObject“) oder Open … For Input] und die ausgelesenen Werte an in einer Wordvorlage definierte Textmarken zu übergeben.
Diese Variante ist vor allem dann anzuraten, wenn die Struktur der Daten nicht direkt für einen Serienbrief geeignet ist (z.B. Datenfelder eines Datensatzes in unterschiedlichen Textzeilen)oder diese erst umständlich in Form gebracht werden müssen. Entsprechende Code-Beispiel kann ich Dir noch bei Bedarf posten (hierfür brauch ich aber einen Musterdatensatz).

Ich hoffe ein wenig weitergeholfen zu haben.

Viele Grüße, tester!

Hallo Tester,

vielen Dank für deine ausführliche Antwort. Ich werde mal am Code weiterschrauben.

Allerdings kommt jetzt noch ne andere Alternative in Betracht: der Einsatz von Textmarken / Querverweisen. Da bin ich noch am probieren, dadurch würde sich auch das Seriendruckproblem in Luft auflösen - immerhin wird ja immer nur jeweils eine Adresse ausgegeben.

Also - nochmal herzlichen Dank …

Gruß aus Swisttal
Frank