[Gelöst] Excelformatierung beibehalten

1. Juni 2007 09:48

Hallo,

ich möchte gerne in eine formatierte Excelvorlage Werte aus Navision importieren. Der Export nach Excel funktioniert soweit, nur wird meine Formatierung (Rahmenlinien und Hintergrundfarben) gelöscht. Gibt es eine Möglichkeit nur die Werte zu übernehmen? Wenn nicht, gibt es einen Befehl für die Rahmenlinien?
Zuletzt geändert von Patrick Ringert am 1. Juni 2007 15:31, insgesamt 1-mal geändert.

1. Juni 2007 12:51

Hallo Patrick,
geht alles, hier ein Beispiel
Code:
celle1 := DELCHR('C' + FORMAT(offset),'<=>',' ');
XlWorkSheet.Range(celle1).Value := 'Datum';
XlWorkSheet.Range(celle1).Borders.Item(XlEdgeBottom).LineStyle := XlContinuous;
XlWorkSheet.Range(celle1).HorizontalAlignment := xlright;
celle1 := DELCHR('D' + FORMAT(offset),'<=>',' ');
XlWorkSheet.Range(celle1).Value := 'Rg.-Art';
XlWorkSheet.Range(celle1).Borders.Item(XlEdgeBottom).LineStyle := XlContinuous;
XlWorkSheet.Range(celle1).HorizontalAlignment := xlright;
celle1 := DELCHR('H' + FORMAT(offset),'<=>',' ');
XlWorkSheet.Range(celle1).Value := 'EURO';
XlWorkSheet.Range(celle1).Borders.Item(XlEdgeBottom).LineStyle := XlContinuous;
XlWorkSheet.Range(celle1).HorizontalAlignment := xlright;

Natürlich musst du die entsprechenden werte für die Konstanten vorher füllen.
Hier eine Auswahl:

xlright := -4152;
XlEdgeBottom := 9;
XlContinuous := 1;
XlLineStyleNone := -4142;
XlLandscape := 2;
xlleft := -4131;
Code in "Code-Tags" der besseren Lesbarkeit wegen abgelegt. Gruß Mikka

Grundsätzliche Vorgehensweise / Empfehlung:
Formatiere in Excel deine Zellen und Zeichen dieses als MAKRO auf.
Im Makro selbst stehen dann die Infos.

Konstanten kannst du die in Excel über das Direkt-Fenster mit
debug.print "Konstantename" ausgeben.

MFG
FIDO

1. Juni 2007 12:56

Hallo Patrick,

ob es Möglich ist nur die Werte zu übernehmen kann ich nicht sagen.
Du kannst im Prinzip (es gibt bestimmt Einschränkungen!) alles was du in Excel mit der Maus machst bzw. in einem Excel-Macro auch in Navision machen.

Hierzu einfach die Makroaufzeichnung starten und die gewünschten Schritte ausführen,
z.B. Zellformatierung Rahmenlinien
Theoretisch müsste das Aufzeichnen von -->Einfügen--> "Nur Werte" auch funktionieren.
Nachdem die Aufzeichnung beendet wurde, kannst du im VBA-Editor die entsprechenden Befehle in Navision übernehmen.

Leider nicht 1:1, hier ist "Try an Error" angesagt.

Hier ein paar Codebeispiele:
Code:
// Zellen Fett Formatieren
xlWorkSheet.Range('A3:A3'+FORMAT(z)).Font.Bold(TRUE);

// Zellformatierung
xlWorkSheet.Range('B4:F14'+FORMAT(z)).NumberFormat('@');

xlWorkSheet.Range('B1:C1').MergeCells(TRUE);    // Zusammenfassen von Zellen

  z:=z+1;  // = Zeilenzähler
// Zeile4
  xlWorkSheet.Range('B' + FORMAT(z)).Value := 'SOLL';
  xlWorkSheet.Range('C' + FORMAT(z)).Value := 'IST';
  xlWorkSheet.Range('D' + FORMAT(z)).Value := '';
   
  xlWorkSheet.Range('E' + FORMAT(z)).Value := 'SOLL';
  xlWorkSheet.Range('F' + FORMAT(z)).Value := 'IST';
  xlWorkSheet.Range('G' + FORMAT(z)).Value := '';

// xlWorkSheet.Range('B2:C2'+FORMAT(z)).Borders.LineStyle(TRUE);
// Erstes Kreuz
xlWorkSheet.Range('C2:C14').Borders.Item(7).LineStyle := 1;
xlWorkSheet.Range('B2:C2').Borders.Item(9).LineStyle := 1;
// Zweites Kreuz
xlWorkSheet.Range('F2:F14').Borders.Item(7).LineStyle := 1;
xlWorkSheet.Range('E2:F2').Borders.Item(9).LineStyle := 1;

// Formatierung Querformat
// xlWorkSheet.PAGESetup := FORMAT("Orientation = xlLandscape");
// Excel Autoformat
// xlWorkSheet.Range('A1:J'+FORMAT(z)).AutoFormat(12,32);

Hinweiß, diese sind zusammenhanglos zusammenkopiert!
Gruß Mikka


PS: Es wüde mich freuen, wenn du deine Ergebnisse hier Posten würdest

1. Juni 2007 13:57

Die Rahmenlinien über Navision funktioniert dank der o.g. Beschreibung. Nur leider kann ich nicht nur die Werte übergeben. Die Formatierung in Excel ist recht aufwendig und möchte das eigentlich nicht über Navision machen. Der VB-Code zum Einfügen von "nur Werte" lautet:
Range("E48").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False

Range("E48").Select

Leider finde ich in Navision im Symbol Menu unter dem Automation Server nicht den Befehl.

1. Juni 2007 14:17

Patrick hat geschrieben:Leider finde ich in Navision im Symbol Menu unter dem Automation Server nicht den Befehl.


Mikka hat geschrieben:Leider nicht 1:1, hier ist "Try an Error" angesagt.


Das ist die Stelle, an der du Gedult und Glück brauchst.
Evtl. bekommst du es hin.

--->Ich habe gerade mal geschaut, es gibt die Methode xlWorkSheet.SpeciaPaste", hier mal ein wenig Experimentieren.
Kleiner Tipp:
Wenn du F5 drückst und die entsprechende Methode auswählst, zeigt das
C/AL Symbol Menü im Fuß den erwarteten String an.

Ach so, das wir auf dem gleichen Nenner sind "xlWorkSheet" ist eine Variable vom Typ "Automation" "Microsoft Excel 9.0 Object Library" -->Classes "Worksheet"

Gruß Mikka

1. Juni 2007 15:30

Es funktioniert, wenn ich den Befehl "XlWrkSht.Range(xlColID + xlRowID).PasteSpecial;" vor der eigentlichen Wertübergabe aufrufe.

Code:
    XlWrkSht.Range(xlColID + xlRowID).PasteSpecial;
   
    IF NumberFormat <> '' THEN
        XlWrkSht.Range(xlColID + xlRowID).NumberFormat := NumberFormat;
    IF Formula = '' THEN
        XlWrkSht.Range(xlColID + xlRowID).Value := "Cell Value as Text"
    ELSE
        XlWrkSht.Range(xlColID + xlRowID).Formula := GetFormula;
    IF Comment <> '' THEN
        XlWrkSht.Range(xlColID + xlRowID).AddComment := Comment;
    IF Bold THEN
        XlWrkSht.Range(xlColID + xlRowID).Font.Bold := Bold;
    IF Italic THEN
        XlWrkSht.Range(xlColID + xlRowID).Font.Italic := Italic;

Code in "Code-Tags" abgelegt,
"Quote-Tags" sind für Zitate!. Gruß Mikka