Problem mit Export in Excel

  • Hallo Leute,


    ich habe einen Agent der mir eine Ansicht in Excel exportiert.
    Das funktioniert auch soweit bis auf das Feld "AFO". Da ist es möglich Mehrfacheingaben zu machen. Ich hab versucht diese über die Join Funktion darzustellen. Da es aber ein Zahlenfeld ist funktioniert dies wahrscheinlich nicht.


    Könnt ihr mir dabei helfen?


    Vielen Dank


    Code:
    Sub Initialize
    Dim xlApp As Variant
    Dim xlSheet As Variant
    Dim Session As New NotesSession
    Dim collection As NotesDocumentCollection
    Dim View As NotesView
    Dim doc As NotesDocument
    Dim db As NotesDatabase

    Set db = session.CurrentDatabase
    Set xlApp = CreateObject("Excel.application")

    xlApp.StatusBar = "WorkSheet wird erstellt. Bitte warten..."
    xlApp.Visible = True
    xlApp.Workbooks.Add
    xlApp.ReferenceStyle = 2

    Set xlSheet = xlApp.Workbooks(1).Worksheets(1)
    xlsheet.Name = "Excel Druckvorlage"

    ' Ueberschriften

    With xlSheet
    .range("A1").Value = "Produkt"
    .range("B1").Value = "AFO"
    .range("C1").Value = "Beschreibung"
    .range("D1").Value = "Tool"
    .range("E1").Value = "Rezept"
    .range("F1").Value = "Name"
    .range("G1").Value = "Datum"

    End With

    ' Formatierung

    With xlapp
    .Columns("A:G").select
    .Rows("1:1").select
    .Selection.font.bold=True
    .Columns("A:A").Select
    .Selection.ColumnWidth = 30
    .Columns("B:B").Select
    .Selection.ColumnWidth = 25
    .Columns("C:C").Select
    .Selection.ColumnWidth = 50
    .Columns("D:D").Select
    .Selection.ColumnWidth = 25
    .Columns("E:E").Select
    .Selection.ColumnWidth = 25
    .Columns("F:F").Select
    .Selection.ColumnWidth = 20
    .Columns("G:G").Select
    .Selection.ColumnWidth = 20
    .Range("A1:G1").Select
    .Range("A1:G1").Activate
    .Selection.Borders(5).LineStyle = -4142
    .Selection.Borders(6).LineStyle = -4142
    .Selection.Borders(7).LineStyle = -4142
    .Selection.Borders(8).LineStyle = -4142
    .Selection.Borders(9).LineStyle = 1
    .Selection.Borders(9).Weight = -4138
    .Selection.Borders(9).ColorIndex = -4105
    .Selection.Borders(10).LineStyle = -4142
    .Selection.Borders(12).LineStyle = -4142
    End With


    Set View = Session.CurrentDatabase.GetView("all")
    Set collection = db.UnprocessedDocuments
    Set Doc = collection.GetFirstDocument
    i = 0
    While Not (Doc Is Nothing)
    With xlSheet
    .range("A" + Cstr(i + 2)).Value = Join(doc.Product,", ")
    [color=CC3300].range("B" + Cstr(i + 2)).Value = Join(doc.AFO,", ")[/color]
    .range("C" + Cstr(i + 2)).Value = doc.Beschreibung(0)
    .range("D" + Cstr(i + 2)).Value = doc.Tool(0)
    .range("E" + Cstr(i + 2)).Value = doc.Rezept(0)


    End With
    i = i + 1
    Set doc = collection.GetNextDocument(doc)
    Wend
    End Sub

    • Offizieller Beitrag

    dann lass doch eine For-schleife darüber laufen und mach Text daraus.
    In etwa so:

    Code
    temp_strg = ""
    trenner = "; "
    For i = 0 to Ubound(doc.AFO)
       If temp_strg = "" Then
          temp_strg = doc.AFO(i)
       Else
          temp_strg = temp_strg & trenner & doc.AFO(i)
       End if
    Next

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Da bekomm ich leider noch den gleichen Fehler. In dem Feld AFO stehen Zahlenwerte drin.
    Wenn 2 Zahlenwerte drin stehen, also Bsp: (5670 , 1234) läuft der Agent ohne Problem.


    Steht nur ein Zahlenwert drin, also Bsp: (1234) bricht er mit einem "Type mismatch" ab.

    • Offizieller Beitrag

    Sorry habe noch den Cstr oder Format vergessen.

    Code
    ...
          temp_strg = Cstr(doc.AFO(i))
    ...


    Gruß
    Dirk

    • Offizieller Beitrag

    Der Join muss raus, anstelle des join muss die For-Schleife verwendet werden.


    Gruß
    Dirk

  • he dirk ich dank dir schonmal für deine hilfe.


    ich steh gerade auf der leitung:-) wie bastel ich denn die For-Schleife richtig in den code rein?


    hab den join rausgenommen und die For-Schleife dann davor gesetzt. aber das passt noch nicht richtig.


    kannst du mir da weiterhelfen?


    Dank dir




    While Not (Doc Is Nothing)
    With xlSheet
    .range("A" + Cstr(i + 2)).Value = Join(doc.Product,", ")


    temp_strg = ""
    trenner = "; "
    For i = 0 To Ubound(doc.AFO)
    If temp_strg = "" Then
    temp_strg = Cstr(doc.AFO(i))
    Else
    temp_strg = temp_strg & trenner & doc.AFO(i)
    End If
    Next

    .range("B" + Cstr(i + 2)).Value = doc.AFO(0)

    .range("C" + Cstr(i + 2)).Value = doc.Beschreibung(0)

    • Offizieller Beitrag

    Du musst den temp-String übergeben und nicht den Feldinhalt.


    Gruß
    Dirk

  • dank dir das hat jetzt soweit funktioniert.
    hab jetzt nur noch ein kleines problem.


    der export wird über einen button ausgelöst. der user sucht sich die dokumente in der view aus, die er exportieren möchte und betätigt den button.


    ich hab jetzt festgestellt, das der script in der 3. excelzeile alle dokumente durchläuft die der user ausgewählt hat.
    es werden dann nur die dokumente, wo in dem AFO-Feld Mehrfacheingaben enthalten sind zeilenversetzt auflistet.


    könnte das ein problem mit der FOR-Schleife sein?


    gruß christian

    • Offizieller Beitrag

    Sorry habe ich übersehen, dass Du i schon für die Zeilen im Excel verwendest.


    Gruß
    Dirk

    • Offizieller Beitrag

    oder über NotesViewNavigator und NotesViewEntry.


    Gruß
    Dirk

    • Offizieller Beitrag

    da kommst Du mit NotesView.Columns ran. Schau Dir mal das Beispiel dazu in der Designer-Hilfe an.


    Gruß
    Dirk