Doppelt unterstrichen beim Excel-Export..?

16. Januar 2008 15:46

Hallo!
Ich exportiere einen Report über den Excel-Buffer und alles klappt auch wunderbar. Aber: Ich möchte gerne Summen nicht normal (das klappt), sondern doppelt unterstreichen.
Dazu müsste ich natürlich den Excel Buffer (Tabelle 370) anpassen, aber nur wie?
Diese drei Zeilen sind vermutlich der Ansatzpunkt, aber trotzdem komme ich nicht so richtig weiter.

Code:
    XlWrkSht.Range(xlColID + xlRowID).Borders.LineStyle := XlLineStyleNone;
    IF Underline THEN
      XlWrkSht.Range(xlColID + xlRowID).Borders.Item(XlEdgeBottom).LineStyle := XlContinuous;



Wenn ich einen Wert in Excel doppelt unterstreiche und das als Makro aufnehme, komme ich auf folgenden Code-Schnipsel:
Selection.Font.Underline = xlUnderlineStyleDouble

Von dort komme ich aber nicht weiter, wie sollte z.B. die Variable xlUnderlineStyleDouble aussehen? Hat jemand eine Idee?

Es grüßt,
Astrill

16. Januar 2008 16:12

Die Idee mit dem Macro war OK, den so bekommt man die
Excel-Spezischen Werte heraus.

xlUnderlineStyleDouble ist in VBA eine Constante:

xlUnderlineStyleDouble hat den Wert -4119

Diese MS-Webseite hilft oft weiter.
http://msdn2.microsoft.com/en-us/library/ms400535.aspx

Hier nach dem Wert suchen.
Ich hoffe das hilft weiter.

16. Januar 2008 16:16

Hallo Astrill,

wenn du immer eine doppelte Unterstreichung wünscht, dann reicht es aus die folgende C/AL-Codezeile in der Tabelle Excel Buffer

Code:
XlContinuous := 1;

durch die folgende zu ersetzen:

Code:
XlContinuous := 9;

Damit erreichst du, dass immer - sobald das Feld Underline gleich TRUE ist - die doppelte Unterstreichung genommen.

Eine elegantere Lösung wäre, die Tabelle Excel Buffer um das neue Boolean-Feld Underline Double zu erweitern. Anschließend müsste im C/AL-Code der Tabelle folgende Zeilen hinzugefügt werden:

Funktion CreateSheet

1. Tausche
Code:
XlContinuous := 1;

durch

Code:
XlContinuous := 1;
XlContinuousDouble := 9;


XlContinuousDouble ist eine lokale Integer-Variable innerhalb der Funktion.

2. Tausche
Code:
    IF Underline THEN
      XlWrkSht.Range(xlColID + xlRowID).Borders.Item(XlEdgeBottom).LineStyle := XlContinuous;

durch

Code:
    IF Underline THEN
      XlWrkSht.Range(xlColID + xlRowID).Borders.Item(XlEdgeBottom).LineStyle := XlContinuous;

    IF "Underline Double" THEN
      XlWrkSht.Range(xlColID + xlRowID).Borders.Item(XlEdgeBottom).LineStyle := XlContinuousDouble;


3. Tausche
Code:
      IF InfoExcelBuf.Underline THEN
        XlWrkSht.Range(InfoExcelBuf.xlColID + InfoExcelBuf.xlRowID).Borders.Item(XlEdgeBottom).LineStyle :=
         XlContinuous;

durch

Code:
      IF InfoExcelBuf.Underline THEN
        XlWrkSht.Range(InfoExcelBuf.xlColID + InfoExcelBuf.xlRowID).Borders.Item(XlEdgeBottom).LineStyle :=
         XlContinuous;

      IF InfoExcelBuf."Underline Double" THEN
        XlWrkSht.Range(InfoExcelBuf.xlColID + InfoExcelBuf.xlRowID).Borders.Item(XlEdgeBottom).LineStyle :=
         XlContinuousDouble;


Gruß, Marc

Gelöst!

16. Januar 2008 17:49

Hallo und vielen Dank!

Der Hinweis, die Variable XlContinuous := 9; zu setzen, war der Knackpunkt! Woher wußtest du das? Bzw. wie kann ich solche Informationen selbst finden? ;-)

Danke nochmals,
so klappt das wunderbar!

Es grüßt,
Astrill

Re: Gelöst!

16. Januar 2008 18:01

astrill hat geschrieben:Woher wußtest du das? Bzw. wie kann ich solche Informationen selbst finden? ;-)

Ich habe es einfach Schritt für Schritt ausprobiert. Bei der 9 hats dann geklappt. :-)

Gruß, Marc