PDA

View Full Version : Aus Excel Zellenwert an AS400 übertragen



DISCOME
15-11-07, 09:05
Hallo zusammen,

ich habe eine Exceltabelle die Produktionsdaten darstellt und ich würde gerne die Werte (aus einer Formel gebildet) die da raus kommen zur AS400 senden. Ich habe die Tabelle und Spalte schon ausfindig gemacht wo die Daten hingehöhren. Jetzt ist nur die Frage wie ich die Werte mittels Makro da hin bekommen...

PS.: Werte von AS400 zu Excel kann ich schon... lol

Ich bedanke mich schon mal für eure Hilfe

Fuerchau
15-11-07, 11:21
Dies können nur die wenigsten.
Du benötigst hierzu ein VBA-Modul, dass mittels ODBC-Zugriff die Daten exportiert.

Alternativ kannst du auch mein Tool Upload/400 downloaden und verwenden.

DISCOME
15-11-07, 11:39
Ist das nicht das selbe wie Daten von der AS400 holen nur anders rum?

Dies ist wenn ich daten von der AS400 hole...

With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=AS400masch;" _
, Destination:=Range("A1"))
.CommandType = xlCmdSql
.CommandText = Array( _
"SELECT AVE.ENAMEH, AVE.ENAMEV, AVML01.VENDOR, AVML01.VNDNAM,", _
" AVE.EPHONE, AVE.EFUNK, AVE.EMAIL", _
" FROM AS400masch.BPCSF.AVML01 AVML01, ", _
"AS400masch.BPCSF.AVE AVE WHERE AVML01.VENDOR= AVE.EVEND and AVE.ESTRE = 'PMM' ")

Fuerchau
15-11-07, 13:36
Excel und MS-Query unterstützen allerdings nur SELECT.

Um Daten auf die AS/400 zu schieben brauchst du einen UPDATE ... WHERE bzw. Insert.

Genau dieses macht mein Upload/400.

DISCOME
15-11-07, 13:54
Also geht dies nicht so ohne weiteres?
Ich wollte dem User es so einfach wie möglich machen und durch ein "einfaches" Makro ein bisschen Arbeit abnehmen.

Durch die Software von Ihnen ist ja erst wieder eine Istallation und Einweisung und Schulung von nöten und dann ist es immer noch nicht gewärleistet das der User es richtig macht. Im Excel ist alles soweit gesichert das er nur gewisse Zellen bearbeiten darf und da würde es sich schön machen eben über das Makro die Daten zu senden... schade.

Aber Ich danke Ihnen noch mal für Ihre Vorschläge.

Fuerchau
16-11-07, 09:07
Natürlich kannst du ein eigenes Makro erstellen.
Due benötigst auf jeden Fall ein VBA-Projekt, externe verweise auf die ADO-Blibliothek und eben ein Verbindung (ODBC) und Update-Statement zur Übertragung.

Mein Tool kannst du soweit vorkonfigurieren (Zellbezügen, Ziellib) und die Automatik auch per VBA starten.

DISCOME
16-11-07, 11:34
Mhh habe dein Appz getestet. Ist so mal gar nicht schlecht! Nur ist mein Problem das ich, so denke ich, das Programm nur ein mal benötige und dann so schnell nicht mehr. Könnstest du mir ein ein paar Tipps geben dann doch ein eigenes Makro zu schreiben. In Bezug auf die Verweise und dem Update-Statement... ist wohl doch ein wenig zu hoch für mich.(bin erst seit knapp 1/2 Jahr mit der AS400 beschäfftigt...

Fuerchau
16-11-07, 12:54
Da frage ich mich doch, was denn teurer ist, deine Arbeitszeit, mehrere Tage Entwicklung und Test oder einmalig €750,-- für unbegrenzte Anwendung ?

Wenn ich dir hier Programmiertipps gebe, wie man eine SQL-Anwendung macht, sprengt das den Rahmen des Forums und ich mache mich arbeitslos.

DISCOME
19-11-07, 13:10
Mhh schade. Ich wollte mal was lernen... aber ich verstehe dich! Muss ich noch ein wenig Googlen und basteln und mal sehen ob ich es mir zurecht stückeln kann...

Ich danke aber trotzdem für die Unterstützung!!

Fuerchau
19-11-07, 16:44
Insoweit kannst du das Forum hier schon nutzen.
Suche mal nach MSADO, Connect, Command usw.

Hier die einfache Version:

- VBA-Editor
- Extras->Verweise->Microsoft ActiveX DataObjects 2.8 einbinden

Neues Modul erstellen

Public sub MyMacro()
dim myConnect as new ADODB.Connection
dim myCommand as new ADODB.Command

MyConnect.Connection = "DSN=MyDsn"
MyConenct.Properties("User")="MYUSER"
MyConenct.Properties("Password")="MYPASS"
MyConnect.Open

MyCommand.Commandtext = "update mylib.myfile set f1=?, f2=? where k1=? and k2=?"
set MyCommand.ActiveConnection = MyConnect

MyCommand(0) = ActiveSheet.Range("A1").Value
MyCommand(1) = ActiveSheet.Range("B1").Value
MyCommand(2) = ActiveSheet.Range("C1").Value
MyCommand(3) = ActiveSheet.Range("D1").Value
MyCommand.Execute

end sub

Der DSN-Name "MyDsn" muss über Systemsteuerung->Verwaltung->ODBC-Quellen noch eingerichtet werden.

Dies ist nur ein Grundgerüst und muss natürlich von dir noch wesentlich angepasst werden.