-
Moin,
ich habe mich schon gewundert, über 100 mal gelesen und keine Antwort. Ist das Vorhaben so ungewöhnlich?
Die Anforderung der Anwender ist ja ganz einfach formuliert: MDG (Mach das geht). Die Vorlagen müssen ilt. Vorgabe der GL n WORD erstellt werden. Also mal kurz erzählt was ich gemacht habe. Vorlage in Word erstellt und Textmarken plaziert wo die Daten gefüllt werden sollen.
Ein Makro erstellt was zunächst mal "hart" die Textmarken füllt. Das funktioniert.
Jetzt soll das Makro erweitert werden, um die Möglichkeit eine Kundennummer einzugeben und die Daten der AS/400 in die Textmarken zu stellen.
Der Zugriff per VBA scheint zu funktionieren allerdings nur mit MS-Access. Da wir aber nur eine Office Version mit Access haben, scheidet m. E. nach diese Möglichkeit aus.
Also Kundennummereingabe mit Prüfung auf Gültigkeit habe ich bereits, mir fehlt eigentlich nur der Teil:
-Mit AS/400 verbinden
-SQL ausführen (Select f1, f2 ... from Kundenstamm where Kundennummer = Input
-Fehlerbehandlung wenn Kunde nicht gefunden wurde
-Füllen der Textmarken
Eigentlich ganz einfach, in RPG wäre das ja schon durch, aber Word ist überhaupt nicht mein Ding.
@dschroeder Das wäre evtl. eine Lösung, das prüfe ich mal, auch wenn ich kein "richtiges BASIC" spreche.
@MR-BN Der Ansatz war der erste den ich ich verfolgt habe, scheitert aber am Anwender. Es "unzumutbar" sich einen Datensatz auszusuchen und diverse Word Dialoge durchzuklicken.
Vielleicht hat ja jemand doch noch einen Ansatz. Trotzdem vielen Dank an Euch.
MFG
DKSPROFI
-
... das ist wohl simpel das falsche Forum. Versuch's mal bei der Mausschieber Fraktion, die haben auch Foren.
D*B
-
Moin
Unsere Kunden machen das auf 2 verschiedenen Wegen
1. < W e r b u n g > mit unserm Spooldesigner wird ein/mehrere Textbausteine erfasst. Die Variablen stehen
im Text. Ein RPGLE Pgm fragt den/die zu druckenden Textbausteine und die Kundennr ab, druckt
die TB-Nr und die Kundendaten, und der Spooldesigner schreibt den Brief, druckt, mailt ... < / W e r b u n g >
2. Der User wählt auf der iSeries den Kunden, dadurch wird eine standardisierte Datei (als Serienbriefvorlage) in 'seinem' verzeichnis erstellt. Dann ruft er die Word vorlage, schreibt/ergänzt seinen Text, speichert und druckt den Serienbrief.
Version 2 geht auch mal daneben! Aber PC Anwender sind Kummer gewöhnt, die schreiben dann den Brief neu!
Gruß
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Moin,
und wie habt Ihr die Lösung 2 realisiert? Für einen Ansatz wäre ich Dir sehr dankbar.
MFG
DKSPROFI
-
Na ja, wie beschrieben ...
Basis ist eine (mehrere) Word Vorlage(n) mit den Serienbrief-Feldern.
VORHER geht der Anwender in eine iSeries Anwendung, wählt den Kunden / Auftrag / Mandant, ...
Die Anwendung löscht/erzeugt eine Datei (ich glaube CSV)
Die Datei enthält die Felder ALLER Briefe/Schreiben
Beim drucken fragt Word ob es ein Serienbrief sein soll, der Anwender sagt ja und druckt alle in der Datei vorhandenen Sätze.
As400 realisierung durch uns, Word Lösung durch 'versierten' Pc-Anwender.
Robi
PS. Ich bevorzuge Version 1!
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Ich glaube, DKSPROFI sucht einen Beispiel-Quellcode in VBA, wie man die Verbindung zur iSeries aufbaut. Da ich kein VB-Programmierer bin, weiß ich nicht genau, wie es geht.
Kann es sein, dass man zunächst in den ODBC Einstellungen des PCs eine ODBC Verbindung einrichten muss? Wenn man IBM Client Access (oder wie es inzwischen auch immer heißen mag) auf dem PC hat, sollte das kein Problem sein. Dann sind die korrekten dlls bereits auf dem PC vorhanden.
Ich habe auf jeden Fall eben mal folgenden Code mit google gefunden. Da machen die es im VBA für Excel. Vielleicht sind da ja ein paar Stichworte drin, an denen du dich weiterhangeln kannst.
Dieter
Sub transfer()
Dim varState As String
Set CS = CreateObject(“ADODB.Connection”)
Set RS = CreateObject(“ADODB.Recordset”)
‘Retrieve values from Cells on the sheet to use as selections in the query below
varState = ActiveSheet.Range(“C2″).Value
varFrom_Date = ActiveSheet.Range(“B3″).Value
varTo_Date = ActiveSheet.Range(“B4″).Value
‘ ISeries connection String
‘ConnectString = “Driver={ISeries Access ODBC Driver};System=10.1.4.1;Uid=xxxxx;Pwd=xxxxx;Librar y=PWRDTA41;QueryTimeout=0″
ConnectString = “Driver={ISeries Access ODBC Driver};System=10.1.4.1;Library=PWRDTA41;QueryTime out=0″
CS.Open (ConnectString)
SqlString = “SELECT hhicusn , C.FFDCNMB, C.FFDSTEB, hhiclsn, SUM(hhiqysa), SUM(hhiexsn), SUM(hhiexac) ” & _
” FROM pwrdta41.hhiorddp ” & _
” left outer join PWRDTA41.FFDCSTBP c” & _
” ON hhicusn = c.ffdcusn and” & _
” hhidivn = c.ffddivn and” & _
” c.ffdcmpn = hhicmpn and” & _
” c.ffddptn = hhidptn” & _
” WHERE hhidtei between ” & varFrom_Date & ” and ” & varTo_Date & _
” and hhiclsn = ‘105’ and c.ffdsteb = ‘” & varState & “‘” & _
” GROUP BY hhicusn, c.ffdcnmb, c.ffdsteb, hhiclsn” & _
” ORDER BY hhicusn”
‘Message box can be used for debugging the SQL statement
‘MsgBox (SqlString)
RS.Open SqlString, CS
‘Clear Previous contents of Cells
Cells.Select
ActiveSheet.Range(“A7:Z65535″).ClearContents
‘copy the Recordset to excel sheet starting at A7
ActiveSheet.Range(“A7″).CopyFromRecordset RS
‘Close Connection and RecordSet
RS.Close
CS.Close
‘Reset cell back to A1
ActiveSheet.Range(“A1″).Select
End Sub
-
Ich glaube, DKSPROFI sucht einen Beispiel-Quellcode in VBA, wie man die Verbindung zur iSeries aufbaut.
Kann sein, aber das ist NICHT unser weg!
Wir erzeugen von der iSeries eine PC Datei, die, mit immer gleichem Namen als Serienbrief Input gilt.
Da kommt schon mal Chaos raus, aber wir machen das auch nur dort, wo es unumgänglich ist, das der Anwender 'seinen' individuellen Text in Word erfasst und dort auch formatiert.
Alles was sich aus festen Texten zusammensetzt, oder wo die Formatierung nicht 'das aller aller wichtigste' ist, verwenden wir Lösung1
(die keine Fehler erzeugt und Optisch locker mit den Word Briefen mithält. Auch durch das automatische Speichern, an' s DMS übergeben oder mailen, ist die Lösung mittlerweile auch von den Anwendern akzeptiert und bevorzugt. Einige Fällen sind schon umgestellt worden da der Anwender nur auf einer Plattform arbeitet (iseries) )
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Moin,
vielen Dank an Dieter so etwas schwebte mir vor. Probiere ich mal aus.
MFG
DKSPROFI
-
Hallo,es gibt bei den Jungs ein News Letter " SmartTools Access Weekly vom 9.7.2015" die bringen immer wieder Tipps wie man was in Word / Excel etc. besser machen kann. Ab und zu auch Makros und so. Habe leider nicht immer die Zeit das jeden Tag zu lesen und auszuprobieren, aber vielleicht suchst Du ja ma bei den auf der Hompage. __GG
-
Moin *all,
ich hole die Frag noch einmal aus der Versenkung. Nachdem ich das Thema erfolgreich ignorieren konnte, habe ich den Ball wieder bekommen und stehe jetzt wie damals völlig auf dem Schlauch.
Kann mit jemand ein Beispiel Code für eine VBA-Verbindung zu der AS/400 aus WORD helfen?
Das habe ich zur Zeit, googeln tue ich schon seit ein paar Tagen, brachte mich aber nicht wirklich weiter.
Dim Connection
Set OBBCString = CreateObject("ADODB.Connection")
Connection = "ODBC;Driver={Client Access ODBC Driver (32-bit)};" & _
"DSN=DSNName;" & _
"SYSTEM=IP;" & _
"Library=Bibliothek" & _
"UID=" & UserId & ";" & _
"PWD=" & UserPw & ";"
Set ODBCRecord = CreateObject("ADODB.Recordset")
OBBCString.Open Connection
ODBCRecord.Open ("Select Feld1 Feld2, Feld3" & _
" From Bibliothek.Datei " & " Where Key_1 = " & Variable1 & _
" And Key2 = " & Variable2 & _
" And Key3 = " &Variable3), Connection
Textfeld1 = Feld1
usw.
Da das kein Fehler bringt, gehe ich davon aus, dass die AS/400 Verbindung OK ist.
mfg
DKSPROFI
-
Da du aber doch Programmierer bist, denke ich doch dass du es richtig machen willst.
Hierzu gehst du am Besten in der VBA-IDE in die Verweise und setzt das Häkchen vor "Microsoft ActiveX Data Object Library". Die Version ist je nach Windows dann 2.8, 6, oder ggf. 10.
Letztlich ist es aber egal.
Die Variablen können dann gezielt als ADODB.Connection, ADODB.Command, ADODB.Recordset definiert werden, CreateObject entfällt, stattdessen nimmt man New.
Korrekt wäre dann:
dim MyConnect as ADODB.Connection
set MyConnect = new ADODB.Connection
Für wiederkehrende Selects sollte man ein Command verwenden:
dim MyCmd as ADODB.Command
set MyCmd = new ADODB.Command
MyCmd.CommandText = "Select Feld1 from MyLib.MyFile where Key1 = ? and Key2 = ? and Key3 = ?"
set MyCmd.ActiveConnection = MyConnect
Zur Ausführung dann einfach:
MyCmd(0) = Var1
MyCmd(1) = Var2
MyCmd(2) = Var3
Dim MyRecordset as adodb.Recordset
Set MyRecordset = MyCmd.Execute
do while MyRecordset.EOF = false
TextFeld = MyRecordset!Feld1
MyRecordset.MoveNext
loop
MyRecordset.Close
MyConnect.Close
Similar Threads
-
By Mario in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 30-10-06, 11:39
-
By karin-vogelmann in forum NEWSboard Windows
Antworten: 0
Letzter Beitrag: 06-06-03, 15:26
-
By Bosch in forum NEWSboard Windows
Antworten: 3
Letzter Beitrag: 19-05-03, 09:06
-
By molter in forum NEWSboard load'n'go
Antworten: 0
Letzter Beitrag: 05-04-01, 11:17
-
By MKnapp in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 19-12-00, 06:43
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks