[gelöst]Exceldateien aus einer Form immer wieder aufrufen?

24. Mai 2011 06:13

Hallo

ich habe da mal wieder ein kleiner oder größeres Problem :-). Ich hoffe es ist nur ein kleines.

Ich habe eine Exceldatei die ich in Navision aufrufe und Daten drin speichere und die Datei dann wieder schließe das klappt auch alles super gut. Das ganze passiert über eine Form mit gesetzten Filter. Was auch alles so funktioiert wie ich mir das vorstelle. So nun das Problem wenn ich die Filter in der Form ändere und dann die Exceldatei wieder aufrufen will kommt die Fehlermeldung das die Variablen schon existieren. So nun meine Frage wie bekomme ich die Variablen leer nachdem ich die Exceltabelle gespeichert habe?

Das ganze sind 3 Variablen (Excel,Book,Sheet) die über den Automation Server initialiesiert werden.
    Excel Automation 'Microsoft Excel 12.0 Object Library'.Application
    Book Automation 'Microsoft Excel 12.0 Object Library'.Workbook
    Sheet Automation 'Microsoft Excel 12.0 Object Library'.Worksheet
Leider kenne ich mich damit noch nicht so richtig aus. Vielleicht hat jemand eine Idee.

Danke schonmal im vorraus.

PS: Stelle hier mal noch meinen Quellcode rein.

Code:
// i als Zähler einbauen von 9 bis 108
i :=9;

Window.OPEN('Datum von    #1######\\'+
            'Datum bis    #2######\\'+
            'Massnahmenr. #3######');
Window.UPDATE(1, "Massnahme von");
Window.UPDATE(2, "Massnahme bis");
Window.UPDATE(3, "Massnahmen Nummer");
Window.INPUT;
Window.CLOSE;


// erzeugen der Daten in einer vorhanden Exceltabelle
CREATE(Excel);
Book := Excel.Workbooks.Add;
Book := Excel.Workbooks.Open('C:\Dokumente und Einstellungen\sfleischer\Desktop\TestErfolgsbeobachtung.xls');
// löschen der daten in der Tabelle funktioniert so nicht
//Excel.Run('TestErfolgsbeobachtung.xls!Modul2.Teilnehmerlistelöschen');
MassnahmenZeilenRec.SETRANGE(MassnahmenZeilenRec.Massnahme, Massnahme);
MassnahmenZeilenRec.SETRANGE(MassnahmenZeilenRec."Massnahme von", "Massnahme von");
IF MassnahmenZeilenRec.FINDFIRST THEN BEGIN
REPEAT
MitarbeiterRec.SETRANGE(MitarbeiterRec."No.", MassnahmenZeilenRec."MitRec Nr");
IF MitarbeiterRec.FINDFIRST THEN ;
IF i <=108 THEN BEGIN
  Sheet := Book.Worksheets.Item('Teilnehmerliste');
  Sheet.Activate;

  Sheet.Range('W1').Value := "Massnahmen Nummer";
  Sheet.Range('B'+FORMAT(i)).Value := MitarbeiterRec."Last Name";
  Sheet.Range('C'+FORMAT(i)).Value := MitarbeiterRec."First Name";
  IF MitarbeiterRec.Sex = MitarbeiterRec.Sex::Female THEN
    Sheet.Range('D'+FORMAT(i)).Value := 'w'
  ELSE
    Sheet.Range('D'+FORMAT(i)).Value := 'm';
  Sheet.Range('G'+FORMAT(i)).Value := "Massnahme von";
  Sheet.Range('H'+FORMAT(i)).Value := "Massnahme bis";
  IF MitarbeiterRec.City <> 'Magdeburg' THEN
    Sheet.Range('K'+FORMAT(i)).Value := '1';
  IF MassnahmenZeilenRec."Teilnahme abgebrochen" = TRUE THEN
    Sheet.Range('P'+FORMAT(i)).Value := '1';
  IF MassnahmenZeilenRec."Teilnahme beendet" = TRUE THEN
    Sheet.Range('Q'+FORMAT(i)).Value := '1';
  IF MassnahmenZeilenRec."Prüfung bestanden" = TRUE THEN
    Sheet.Range('R'+FORMAT(i)).Value := '1';
  IF (MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::Ulsped) OR
     (MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::"Ullrich Kaufungen") OR
     (MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::"Ullrich Berlin") OR
     (MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::"Horst Ullrich") THEN
    Sheet.Range('T'+FORMAT(i)).Value := '1';
  IF MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::Extern THEN
    Sheet.Range('V'+FORMAT(i)).Value := '1';
  IF MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::Ulsped THEN
    Sheet.Range('AA'+FORMAT(i)).Value := '1';
  IF MitarbeiterRec.Arbeitsaufnahme = MitarbeiterRec.Arbeitsaufnahme::keine THEN
    Sheet.Range('Z'+FORMAT(i)).Value := '1';


  // zum Abschluss die Makro's aufrufen
  Excel.Run('TestErfolgsbeobachtung.xls!Modul1.DatenausTNListeArbeitsamt');
  Excel.Run('TestErfolgsbeobachtung.xls!Modul1.DatenausTNListeTräger');
  // Es müssen noch die Massnahmenummern eingetragen werden in den einzelnen Tabellen
  Sheet := Book.Worksheets.Item('Erfolgsbeob.,-bilanz Träger');
  Sheet.Activate;
  Sheet.Range('B2').Value := 'Magdeburg';
  CASE Massnahme OF
  0: Sheet.Range('B4').Value := '';
  1: Sheet.Range('B4').Value := 'ADR Kl.1';
  2: Sheet.Range('B4').Value := 'ADR KL.7';
  3: Sheet.Range('B4').Value := 'ADR-Basis';
  4: Sheet.Range('B4').Value := 'ADR-Fortb.';
  5: Sheet.Range('B4').Value := 'ADR-Tank';
  6: Sheet.Range('B4').Value := 'B/BE';
  7: Sheet.Range('B4').Value := 'C/CE';
  8: Sheet.Range('B4').Value := 'D';
  9: Sheet.Range('B4').Value := 'Gabelstabler';
  10:Sheet.Range('B4').Value := 'Perfektionstraining';
  11:Sheet.Range('B4').Value := 'Speditionskraftfahrer';
  12:Sheet.Range('B4').Value := 'EU-Speditionskraftfahrer';
  13:Sheet.Range('B4').Value := 'Weiterbildung BKrFQG';
  END;
  Sheet.Range('B6').Value := 'Meier Akademie GmbH';
  Sheet.Range('G4').Value := "Massnahme von";
  Sheet.Range('I4').Value := "Massnahme bis";
  Sheet.Range('G6').Value := 'Magdeburg';
  Sheet.Range('I8').Value := "Massnahmen Nummer";
  Sheet.Range('I67').Value := "Kosten Pro Person";
 
  Sheet := Book.Worksheets.Item('Erfolgsbeob.,-bilanz AA');
  Sheet.Activate;
  Sheet.Range('B2').Value := 'Magdeburg';
  CASE Massnahme OF
  0: Sheet.Range('B4').Value := '';
  1: Sheet.Range('B4').Value := 'ADR Kl.1';
  2: Sheet.Range('B4').Value := 'ADR KL.7';
  3: Sheet.Range('B4').Value := 'ADR-Basis';
  4: Sheet.Range('B4').Value := 'ADR-Fortb.';
  5: Sheet.Range('B4').Value := 'ADR-Tank';
  6: Sheet.Range('B4').Value := 'B/BE';
  7: Sheet.Range('B4').Value := 'C/CE';
  8: Sheet.Range('B4').Value := 'D';
  9: Sheet.Range('B4').Value := 'Gabelstabler';
  10:Sheet.Range('B4').Value := 'Perfektionstraining';
  11:Sheet.Range('B4').Value := 'Speditionskraftfahrer';
  12:Sheet.Range('B4').Value := 'EU-Speditionskraftfahrer';
  13:Sheet.Range('B4').Value := 'Weiterbildung BKrFQG';
  END;
  Sheet.Range('B6').Value := 'Meier Akademie GmbH';
  Sheet.Range('G4').Value := "Massnahme von";
  Sheet.Range('I4').Value := "Massnahme bis";
  Sheet.Range('G6').Value := 'Magdeburg';
  Sheet.Range('I8').Value := "Massnahmen Nummer";
  Sheet.Range('I67').Value := "Kosten Pro Person";

END;
i += 1;
UNTIL MassnahmenZeilenRec.NEXT = 0;
END;

//Speichern und schließen der Exceltabelle
Book.SaveAs('C:\Dokumente und Einstellungen\sfleischer\Desktop\Massnahme '+"Massnahmen Nummer"+'_'+
            FORMAT("Massnahme von")+'_'+FORMAT("Massnahme bis")+'.xls');
Book.Close;
Excel.Quit;
Zuletzt geändert von flowerdog am 24. Mai 2011 10:17, insgesamt 1-mal geändert.

Re: Exceldateien aus einer Form immer wieder aufrufen?

24. Mai 2011 07:59

Guten Morgen,

Variablen bekommst du wieder geleert mit dem Befehl CLEAR.


Zu deinem Quellcode noch eine kurze Anmerkung:

Der CREATE Befehlt führt zu fehlern wenn er doppelt aufgerufen wird.
Hier hilft die Funktion ISCLEAR.
Code:
IF ISCLEAR(EXCEL) THEN
  CREATE(Excel);

Re: Exceldateien aus einer Form immer wieder aufrufen?

24. Mai 2011 10:17

Danke das wars. Hat super funktioniert