Excel Export mit Auswahlboxen

4. März 2009 10:56

Hallo Leute,

habe mal ne Frag eund zwar:
ist es möglich bei einem Excel Export aus Navision 5.0 SP1 die Felder in Excel zu einem Auswahlfeld zu formatieren? Als würde man eine Datenüberprüfung machen?

Die Syntax in Excel wäre folgende:
Code:
  Range("A7").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Ja;Nein"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub


Kann man das auch irgendwie aus Navision heraus erzeugen??

Grüße
Andree

Re: Excel Export mit Auswahlboxen

4. März 2009 12:16

An sich sollte das möglich sein da du Über die Automations die Gleichen Möglichkeiten hst wie in Excel selbst. um zu wissen auf welche funktion excel bei der Formatierung geht würde ich mal ein Makro aufnehmen und mir den Vorgang dann in dem VBA Code anschauen.

Re: Excel Export mit Auswahlboxen

5. März 2009 09:36

Hallo Andree,

ich hatte diese Anforderung auch schon einmal.
Ich bin dann folgendermaßen vorgegangen:
- ich habe in der Table 370 "Excel Buffer" eine neue Funktion erstellt "CreateValidationRuleFromList"

Die sieht so aus:

Code:
    PROCEDURE CreateValidationRuleFromList@1106800001(Range@1000 : Code[20];p_ValidList@1106800000 : Variant);
    VAR
      XLValidation@1001 : Automation "{00020813-0000-0000-C000-000000000046} 1.5:{0002442F-0000-0000-C000-000000000046}:'Microsoft Excel 11.0 Object Library'.Validation";
      XLRange@1002 : Automation "{00020813-0000-0000-C000-000000000046} 1.5:{00020846-0000-0000-C000-000000000046}:'Microsoft Excel 11.0 Object Library'.Range";
    BEGIN
      XlApp.Goto(Range);
      XLRange := XlApp.Selection;
      XLValidation := XLRange.Validation;
      XLValidation.Add(3,1,1,p_ValidList);

      XlApp.Goto(XlApp.PreviousSelections(1));
    END;


In meinem Report zum Exportieren von Daten fülle ich dann intern die Liste der möglichen Eingabewerte in einer Spalte z.B. Ländercodes, Verkäufercodes, etc.
Dies funktioniert allerdings nur, wenn diese Liste (als Textvariable) nicht länger wird wie 1024 Zeichen.
Diese Auswahlliste(n) habe ich über eine oder mehrere Textvariablen einen Namen vergeben z.B. "LAND".
Da ich beim Excelexport über den Excelbuffer weiß, in welcher Spalte der Ländercode exportiert wird, wird intern ein Bereich in der Spalte markiert (z.B. SPALTE B ab Zeile 2 bis Zeile 65000) und dieser Spalte die gültigen Werte lt. Auswahlliste zugewiesen.

Beispiel:
Code:
      IF txtValidCountries <> '' THEN BEGIN
        // 12
        ExcelBuf.SetCurrent(2,12);
        ExcelBuf.StartRange;
        ExcelBuf.SetCurrent(65000,12);
        ExcelBuf.EndRange;
        ExcelBuf.CreateRange(Text201);
        ExcelBuf.CreateValidationRuleFromList(Text201,txtValidCountries);
      END;


in der Variablen "txtValidCountries" stehen die gültigen Ländercodes lt. Navision-Tabelle "Country".
Die Variable "txtValidCountries" wird dabei vor dem eigentlichen Export gefüllt - getrennt durch ";".
Dann wird lt. obigen Beispiel der Bereich in Spalte 12 von Zeile 2 bis Zeile 65000 markiert.
Dieser Range wird über die Textkonstante "Text201" als "COUNTRY" benannt und dann über die Funktion "CreateValidationFromList" die gültigen Werte zugewiesen.

In Excel hat man danach eine schöne Auswahlliste.

Gruß
Jörg