Word Daten Übergabe mit Tabellen

Moderator: ModerationP

Re: Word Daten Übergabe mit Tabellen

Beitragvon Bitsqueezer » 02. Aug 2021, 15:50

Hallo Rebecca,

ich sag' ja, bin nicht "trittsicher" im Word-Objektmodell...:)

".Value" ist der übliche Standard in Access. Aber Du hast es ja mit ".Text" selbst gefunden.

Nach Deinem Makro ist "CentimetersToPoints" offenbar eine Funktion aus Word - da solltest Du dann sicherheitshalber das Word-Applikationsobjekt voranstellen (also die Objektvariable, die Du beim Erstellen der Word-Anwendung verwendet hast). Ansonsten kann es da zu Problemen kommen, wenn eine gleichnamige Funktion in Access oder einer anderen eingebundenen Library ebenfalls vorkommt.

Einfügen neuer Zeile: Hängt davon ab, wie Du das gestaltet hast. Ob die Vorlage bereits eine Tabelle mit einigen Zeilen enthält, die Du befüllst, oder ob eine neue Zeile automatisch mit Deiner Schleife mit der nächsten Zeile über "Cell" angelegt wird. In ersterem Fall würde ich die Vorlage so ändern, daß die Tabelle nur eine Zeile enthält, per Makrorekorder aufzeichnen, wie Word eine neue Zeile in die Tabelle einfügt und das dann in Deinem Code verwenden, um eine Zeile hinzuzufügen, wenn es an den nächsten Datensatz aus Deinem Recordset geht.
Wenn die Zeile bereits automatisch durch den Zugriff auf ".Cell(Zeile +1...) entsteht, dann brauchst Du ja nur eine If-Bedingung vorher einzufügen, die die gewünschten Bedingungen testet und entsprechend die Formatierungszeilen ausführt oder nicht.

Oh, sehe gerade, es gibt eine Zeile ".Rows.Add" in Deinem Code, das ist ja dann das Anlegen der nächsten Zeile. Das mußt Du dann entsprechend am Anfang per Deiner Bedingungen ausführen lassen oder nicht.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8437
Registriert: 21. Jun 2007, 12:17

Re: Word Daten Übergabe mit Tabellen

Beitragvon RebeccaLiDe » 02. Aug 2021, 18:25

Hallo,

Oh, sehe gerade, es gibt eine Zeile ".Rows.Add" in Deinem Code, das ist ja dann das Anlegen der nächsten Zeile. Das mußt Du dann entsprechend am Anfang per Deiner Bedingungen ausführen lassen oder nicht.


:?: OKAY... genau dabei habe ich Probleme. Ich bekomme da keine Bedingung hin. Auch im Netz finde ich keinen Anhaltpunkt genauso wenig wie in der Hilfe...

Wie kann ich eine neue Zeile mit Bedingung einfügen???
Kannst du mir einen Denkanstoß geben?!

Grüße und schönen Abend
Rebecca
RebeccaLiDe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 449
Registriert: 26. Jan 2009, 11:44
Wohnort: Fürth

Re: Word Daten Übergabe mit Tabellen

Beitragvon RebeccaLiDe » 02. Aug 2021, 18:31

Hallo nochmal,

Beziehe ich mich hierbei nicht auf die Tabelle in Word??:
With .Cell(Zeile2 + 2, 1).Range
.Text = Nz(rs("FProjekt"))
.Font.Bold = False
.Font.Size = 10
.ParagraphFormat.LeftIndent = CentimetersToPoints(2.1) 'InchesToPoints(0)
.ParagraphFormat.SpaceBefore = 0
End With


Nach Deinem Makro ist "CentimetersToPoints" offenbar eine Funktion aus Word -

Klar verstanden

da solltest Du dann sicherheitshalber das Word-Applikationsobjekt voranstellen (also die Objektvariable, die Du beim Erstellen der Word-Anwendung verwendet hast).

?? Hier steig ich gerade aus... Es kommt kein Fehler...Was/Wie/Wo soll ich machen??? :?

Ansonsten kann es da zu Problemen kommen, wenn eine gleichnamige Funktion in Access oder einer anderen eingebundenen Library ebenfalls vorkommt.
Verstehe ich , jedoch weiß ich nicht wie ich das Ausbessern soll... Sorry

Schönen Abend.
Liebe Grüße
RebeccaLiDe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 449
Registriert: 26. Jan 2009, 11:44
Wohnort: Fürth

Re: Word Daten Übergabe mit Tabellen

Beitragvon Bitsqueezer » 03. Aug 2021, 00:17

Hallo Rebecca,

ja, mit dem ".cell" beziehst Du Dich auf ein Word-Objekt - kein Problem.

Mit "CentimetersToPoints" (weil kein Punkt davor) auf eine Funktion, die aus dem Word-Objektmodell kommt. In Word wäre das so OK, Du könntest dort auch schreiben "Application.CentimetersToPoints", um genau zu sein.

In Access hast Du das Word-Objektmodell aber nur über die externe Verbindung "mit eingebunden", entweder als Late- oder Early-Binding. Daher geht "Application" nicht, denn das würde hier auf Access verweisen.

Du hast aber sicher eine Objektvariable für Word, erstellt bei "Create...". Um Word auch wieder beenden zu können - das ist das gleiche Objekt wie "Application" in Word.

Sollte die Funktion nicht aus "Application" kommen, kannst Du innerhalb von Word auf den Namen der Funktion gehen und mit SHIFT-F2 ermitteln, wo sie herkommt.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8437
Registriert: 21. Jun 2007, 12:17

Re: Word Daten Übergabe mit Tabellen

Beitragvon RebeccaLiDe » 03. Aug 2021, 08:25

Guten Morgen Christian,

wie ich sehe bist du auch eine Nachteule.. :-)

Kurzes Feedback: Ja ich öffne Word und ja ich habe eine Objektvariable für Application erstellt.
Hier mal ein Auszug:

Code: Alles auswählen
Sub testen2()
'On Error GoTo err_sub
    Dim wdAnw As Word.Application
    Dim wdDok As Word.Document
    Dim rs As DAO.Recordset, Zeile As Integer
    Dim fld As DAO.field
    Dim wdDoc As Object
    Dim rng As Word.Range
    Dim tm As Object
    Dim MaId As String 'Mitarbeiter ID

   
    Dim wdTMWerde As Word.Table
    Dim wdTMWeiter As Word.Table
    Dim wdTMUrkunde As Word.Table
    Dim wdTMProjekte As Word.Table
    Dim wdTMExtern As Word.Table
   
   
   
   
        gbl_DocName = "V:\Projektdatenbank\KreutzDB_Vorlagen\A-KOPF\Lebenslauf.dotm" 'Pfad der Vorlage
   
               MaId = 176
   
             
       Set rs = CurrentDb.OpenRecordset("SELECT *" _
                                    & " FROM abf_Mitarbeiter" _
                                   & " WHERE ma_id=" & MaId) 'Me!Ma_id)
    If rs.EOF Then Exit Sub
    On Error Resume Next
    Set wdAnw = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
         Set wdAnw = CreateObject("Word.Application")
    End If
     
 '   On Error GoTo err_sub
    Set wdDok = wdAnw.Documents.Add(Template:=gbl_DocName)
    With wdAnw
        .Visible = True
   
   
       .ActiveDocument.Bookmarks("Foto").Range.InlineShapes.AddPicture _
                    FileName:="V:\Projektdatenbank\KreutzDB_Vorlagen\A-KOPF\Mitarbeiterfotos-nicht-aendern\" & _
                               "os_neu" & ".jpg" 'Me!Ma_Kürzel & ".jpg"

       .Selection.ShapeRange.PictureFormat.Brightness = 1
       
       
        For Each fld In rs.Fields
            If .ActiveDocument.Bookmarks.Exists(fld.Name) Then
                .ActiveDocument.Bookmarks(fld.Name).Range = Nz(rs(fld.Name))
            End If
         
        Next fld
        rs.Close
    End With



'Projekte Fremdfirmen
     
         
         Set rs = CurrentDb.OpenRecordset("SELECT FFirma, FProjekt, BO_PZ FROM abf_Leben_FFA" _
                                        & " WHERE FFa_Ma_id=" & MaId) ' Me!Ma_id)
                                       
           Set wdTMExtern = wdDok.Bookmarks("TMExtern").Range.Tables(1)
           
           Zeile = 0
            rs.MoveLast
            rs.MoveFirst

   
   With wdTMExtern
   
 Do Until rs.EOF
 
           
           With .Cell(Zeile + 1, 1).Range
                    .Text = Nz(rs("FFirma"))
                    .Font.Bold = True
                    .Font.Size = 11
                    .ParagraphFormat.LeftIndent = CentimetersToPoints(0) 'InchesToPoints(0)
                    .ParagraphFormat.SpaceBefore = 12
           End With
                     
                      If Zeile < rs.RecordCount * 4 Then .Rows.Add
           
            With .Cell(Zeile2 + 2, 1).Range
                    .Text = Nz(rs("FProjekt"))
                    .Font.Bold = False
                    .Font.Size = 10
                    .ParagraphFormat.LeftIndent = CentimetersToPoints(2.1) 'InchesToPoints(0)
                    .ParagraphFormat.SpaceBefore = 0
            End With
                      .Rows.Add
                   
            With .Cell(Zeile + 3, 1).Range
                    .Text = Nz(rs("BO_PZ"))
                    .Font.Bold = False
                    .Font.Size = 8
                    .ParagraphFormat.LeftIndent = CentimetersToPoints(2.1) 'InchesToPoints(0)
                    .ParagraphFormat.SpaceBefore = 0
            End With
                      .Rows.Add
           
             Zeile = Zeile + IIf(Nz(rs("FFirma")) = "", 3, 4)

            rs.MoveNext
Loop

    rs.Close
End With


    Set rs = Nothing
    Set wdDok = Nothing
    Set wdAnw = Nothing
End Sub


Am Ende schließe ich auch brav alles... Müsste doch so passen, oder?

Darf ich nochmal fragen nach der Bedingung? Siehe meinen Beitrag von 18.25 Uhr. Hast du da noch eine Idee für mich?

Liebe Grüße Rebecca
RebeccaLiDe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 449
Registriert: 26. Jan 2009, 11:44
Wohnort: Fürth

Re: Word Daten Übergabe mit Tabellen

Beitragvon knobbi38 » 03. Aug 2021, 12:01

Hallo Rebecca,

Am Ende schließe ich auch brav alles

Nein, das machst du leider nicht. Mit einfach mal eine Objekt-Referenz auf Nothing setzen wird nichts geschlossen!
Dokumente werden mit Close() und die Word-Instanz selber mit Quit() beendet.
Das hatten wir gerade in einem anderen Forum und machte dort auch schon Probleme.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3405
Registriert: 02. Jul 2015, 14:23

Re: Word Daten Übergabe mit Tabellen

Beitragvon RebeccaLiDe » 03. Aug 2021, 13:09

Hallo Urlich,

jetzt bin ich verwirrt. Ich möchte doch Word nicht komplett schließen, auch das gerade erstellt Dokument soll nicht geschlossen werden...

Ich meinte eher damit, dass in den Variablen nichts mehr enthalten ist.

Grüße Rebecca
RebeccaLiDe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 449
Registriert: 26. Jan 2009, 11:44
Wohnort: Fürth

Re: Word Daten Übergabe mit Tabellen

Beitragvon knobbi38 » 03. Aug 2021, 13:28

Hallo Rebecca,

wenn du das erstellte Dokument/Word nicht nach der Verarbeitung schließen möchtest, was ist denn dann das Ziel?

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3405
Registriert: 02. Jul 2015, 14:23

Re: Word Daten Übergabe mit Tabellen

Beitragvon RebeccaLiDe » 03. Aug 2021, 14:46

Hallo Urlich,

mit folgendem Code füge ich Daten von Access nach Word in eine Tabelle. Klappt soweit auch alles, jedoch
Bräuchte nur noch Hilfe beim Einfügen neuer Zeilen.
Sobald BO_PZ oder FFirma oder FProjekt keinen Inhalt hat soll die Zeile gelöscht, bzw. nicht angelegt werden.
Da hänge ich gerade total in der Luft, es werden natürlich immer neue Zeilen eingefügt durch .rows.add jedoch bekomme ich keine Bedingung hin, egal wie ich es drehe und wende und ich bin da mit meinem Latein am Ende und habe gehofft das mir hier evtl. geholfen werden kann...

Code: Alles auswählen
 Do Until rs.EOF
 
           
           With .Cell(Zeile + 1, 1).Range
                    .Text = Nz(rs("FFirma"))
                    .Font.Bold = True
                    .Font.Size = 11
                    .ParagraphFormat.LeftIndent = CentimetersToPoints(0) 'InchesToPoints(0)
                    .ParagraphFormat.SpaceBefore = 12
           End With
                     
                      If Zeile < rs.RecordCount * 4 Then .Rows.Add
           
            With .Cell(Zeile2 + 2, 1).Range
                    .Text = Nz(rs("FProjekt"))
                    .Font.Bold = False
                    .Font.Size = 10
                    .ParagraphFormat.LeftIndent = CentimetersToPoints(2.1) 'InchesToPoints(0)
                    .ParagraphFormat.SpaceBefore = 0
            End With
                      .Rows.Add
                   
            With .Cell(Zeile + 3, 1).Range
                    .Text = Nz(rs("BO_PZ"))
                    .Font.Bold = False
                    .Font.Size = 8
                    .ParagraphFormat.LeftIndent = CentimetersToPoints(2.1) 'InchesToPoints(0)
                    .ParagraphFormat.SpaceBefore = 0
            End With
                      .Rows.Add
           
             Zeile = Zeile + IIf(Nz(rs("FFirma")) = "", 3, 4)

            rs.MoveNext
Loop


Grüße Rebecca
RebeccaLiDe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 449
Registriert: 26. Jan 2009, 11:44
Wohnort: Fürth

Re: Word Daten Übergabe mit Tabellen

Beitragvon knobbi38 » 03. Aug 2021, 18:32

Hallo Rebecca,

diese Bedingung
Sobald BO_PZ oder FFirma oder FProjekt keinen Inhalt hat soll die Zeile gelöscht, bzw. nicht angelegt werden.

gehört nicht in den Code für das Einfügen, sondern in die Where-Klausel deiner SQL-Anweisung, worauf dein Recordset basiert.
Zum einfachen Erstellen, kannst du in der QBE dir eine passende Abfrage zusammenstellen und, wenn alles passt, in der SQL-Ansicht die SQL-Anweisung anzeigen lassen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3405
Registriert: 02. Jul 2015, 14:23

Re: Word Daten Übergabe mit Tabellen

Beitragvon DerHoepp » 04. Aug 2021, 10:42

Hallo auch noch einmal von mir,


knobbi38 hat geschrieben:das Einfügen, sondern in die Where-Klausel deiner SQL-Anweisung, worauf dein Recordset basiert.

ich habe auch etwas Probleme, mir die konkrete Situation vorzustellen. Wenn ich das aber richtig verstanden habe, gibt es für einige "Projekte" zusatzinformationen, die nicht für jede ID gefüllt sein müssen, und die in Word entsprechend keine eigene Tabellenzelle erhalten sollen.

@Rebecca:
Kannst du vielleicht mal eine einfache tabellarische Darstellung eines Recordsets darstellen? Und dann noch eine Darstellung der Zieltabelle in Word? Mir persönlich würde es auch helfen, wenn du noch den Zweck der Übung erläuterst. Was sind das für Projekte? Und was soll das Word-Dokument bezwecken? (Ich bleibe dabei, der Weg sollte über in der Word-Vorlage gespeicherte Formatvorlagen gehen und kein rumgeschraube an einzelnen Eigenschaften.)

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9674
Registriert: 14. Mai 2013, 11:08

Vorherige

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste