tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
861
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    edgar113 edgar113 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Hallo,
    ich habe folgendes Problem.
    Hab auch im Forum gesucht aber nichts passendes gefunden.

    Ich habe eine Datenbank mit einem Formular in dem ein Unterformular ist.
    Das Formular heist frmOfferten und das Unterformular heist frmArtikelOfferte mit den Datenfeldern "IKS", "Bezeichnung" und "Generik".
    Die Tabellen-Datenfelder "Bezeichnung" und "Generik" aus dem Unterformular möchte ich in ein schon geöffnetes Word dokument einfügen.
    Ich habe leider nicht soviel ahnung von VBA
    Ich hatte mir das folgendermassen vorgestellt.
    Ich Drücke einen Button und anschließend werden alle Datensätze des gewählten Unterformulares in mein Worddokument kopiert.
    Mit dem beigefügten Code hatte ich schon erfolg. Aber leider wird hier ein neues Word-Dokument geöffnet.
    Wie gesagt mein Word-Dokument ist schon offen
    Des Weiteren werden auch bei diesem Code leere Felder nicht übertragen bzw. es wird an der Stelle Abgebrochen.

    PHP-Code:
    Private Sub DokumentFRZ_Click()
      
    Dim rs As DAO.Recordset
      Dim i 
    As Integer
      Dim wordobj 
    As word.Application
      Dim worddoc 
    As word.Document
      Dim objBMRange 
    As word.Range
      Dim VORLAGE 
    As String
      Dim FS 
    As FileSearch
      Dim test 
    As Integer
      Dim Lesefiles 
    As String
      Dim Laufwerksordner 
    As String
      Dim strBMName 
    As String
      Dim strBMText 
    As String
      Dim strText 
    As String
      Vorlagenordner 
    Application.CurrentProject.Path
      Set FS 
    Application.FileSearch
        With FS
            
    .LookIn Vorlagenordner
            Debug
    .Print Vorlagenordner
            
    .NewSearch
            
    .SearchSubFolders False
               
    'Filter für *.doc einstellen
            .FileName = "*.doc*"
            .Execute
            For i = 1 To .FoundFiles.Count
              Lesefiles = Lesefiles & ";" & Mid(.FoundFiles(i), Len(Vorlagenordner) + 2)
            Next i
        End With
       '
    Me!Dokument.RowSourceType valuelist
        Me
    !DokumentFRZ.RowSource Mid(Lesefiles2)
        
    Laufwerksordner Vorlagenordner "\" & Me!DokumentFRZ
            
       'Start Microsoft Word.
        Set wordobj = CreateObject("
    Word.Application")
       'Vorlage erstellen. Dadurch wird das Original nicht überschrieben
        VORLAGE = Laufwerksordner
              
              Set worddoc = wordobj.Documents.Add(Template:=VORLAGE)
        'Vorgeschlagener Ordner, wenn 'Speichern unter' in Word gewählt wird
        'Ordner muss schon existieren.
        'worddoc.Parent.ChangeFileOpenDirectory "
    e:\"
        With wordobj
           'Make the application visible.
            wordobj.Visible = True
           'wordobj.Activate
           'Open the document.
           'Move to each bookmark and insert text from the form.
           'Fehlerroutine für nicht vorhandene bookmarks in Wordvorlage
            On Error GoTo ERRORBEENDEN

            Set rs = Me![frmArtikelOfferte].Form.RecordsetClone
            rs.MoveLast
            rs.MoveFirst
            If Not (rs.EOF And rs.BOF) Then
            For i = 1 To rs.RecordCount
            
                   
                   'worddoc.Bookmarks("
    Pharmacode").Select
                   'wordobj.Selection.TypeText Text:=CStr(rs!PH_Code)
                   worddoc.Bookmarks("
    Bezeichnung").Select
                   wordobj.Selection.TypeText Text:=CStr(rs!Bezeichnung)
                   worddoc.Bookmarks("
    Generika").Select
                   wordobj.Selection.TypeText Text:=CStr(rs!Generika)
                   
                   If i = rs.RecordCount Then Exit Sub 'Leerzeile vermeiden
                   wordobj.Selection.InsertRows 1
                   wordobj.Selection.Collapse Direction:=wdCollapseStart
                   
                     'wordobj.Selection.MoveRight Unit:=wdCell
                    'With worddoc
                       'Set objBMRange = wordobj.Selection.Range
                             '.Bookmarks.Add Name:="
    Pharmacode", Range:=objBMRange
                             '.Bookmarks.DefaultSorting = wdSortByName
                             '.Bookmarks.ShowHidden = False
                    'End With
                     wordobj.Selection.MoveRight Unit:=wdCell
                    With worddoc
                     Set objBMRange = wordobj.Selection.Range
                        .Bookmarks.Add Name:="
    Bezeichnung", Range:=objBMRange
                        .Bookmarks.DefaultSorting = wdSortByName
                        .Bookmarks.ShowHidden = False
                    End With
                        wordobj.Selection.MoveRight Unit:=wdCell
                    With worddoc
                     Set objBMRange = wordobj.Selection.Range
                        .Bookmarks.Add Name:="
    Generika", Range:=objBMRange
                        .Bookmarks.DefaultSorting = wdSortByName
                        .Bookmarks.ShowHidden = False
                    End With
                      
                rs.MoveNext
                
              Next i
            End If
            rs.Close
            Set rs = Nothing
        End With
        Set worddoc = Nothing
        Set wordobj = Nothing
        Exit Sub
    ERRORBEENDEN:
      Exit Sub
    End Sub

    Private Sub DokumentFRZ_Enter()
      Vorlagenordner = Application.CurrentProject.Path
      Dim i As Integer
      Dim Lesefiles As String
      Dim test As Integer
      Dim FS As FileSearch
      Set FS = Application.FileSearch
        With FS
            .LookIn = Vorlagenordner
            .NewSearch
            .SearchSubFolders = False
              'Filter für *.doc einstellen
            .FileName = "
    *.doc*"
            .Execute
            For i = 1 To .FoundFiles.Count
              Lesefiles = Lesefiles & "
    ;" & Mid(.FoundFiles(i), Len(Vorlagenordner) + 2)
              'Debug.Print Lesefiles
            Next i
        End With
       'Me!comboVorlagenFRZ.RowSourceType = valuelist
        Me!DokumentFRZ.RowSource = Mid(Lesefiles, 2)
    End Sub 
    Hat einer einen Tipp
    Gruß Edgar
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Nur mal schnell das ganze in VB-Tags anstelle von PHP-TZags, damit man es lesen kann
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    
    Private Sub DokumentFRZ_Click()
      Dim rs As DAO.Recordset
      Dim i As Integer
      Dim wordobj As word.Application
      Dim worddoc As word.Document
      Dim objBMRange As word.Range
      Dim VORLAGE As String
      Dim FS As FileSearch
      Dim test As Integer
      Dim Lesefiles As String
      Dim Laufwerksordner As String
      Dim strBMName As String
      Dim strBMText As String
      Dim strText As String
      Vorlagenordner = Application.CurrentProject.Path
      Set FS = Application.FileSearch
        With FS
            .LookIn = Vorlagenordner
            Debug.Print Vorlagenordner
            .NewSearch
            .SearchSubFolders = False
               'Filter für *.doc einstellen
            .FileName = "*.doc*"
            .Execute
            For i = 1 To .FoundFiles.Count
              Lesefiles = Lesefiles & ";" & Mid(.FoundFiles(i), Len(Vorlagenordner) + 2)
            Next i
        End With
       'Me!Dokument.RowSourceType = valuelist
        Me!DokumentFRZ.RowSource = Mid(Lesefiles, 2)
        Laufwerksordner = Vorlagenordner & "\" & Me!DokumentFRZ
            
       'Start Microsoft Word.
        Set wordobj = CreateObject("Word.Application")
       'Vorlage erstellen. Dadurch wird das Original nicht überschrieben
        VORLAGE = Laufwerksordner
              
              Set worddoc = wordobj.Documents.Add(Template:=VORLAGE)
        'Vorgeschlagener Ordner, wenn 'Speichern unter' in Word gewählt wird
        'Ordner muss schon existieren.
        'worddoc.Parent.ChangeFileOpenDirectory "e:"
        With wordobj
           'Make the application visible.
            wordobj.Visible = True
           'wordobj.Activate
           'Open the document.
           'Move to each bookmark and insert text from the form.
           'Fehlerroutine für nicht vorhandene bookmarks in Wordvorlage
            On Error GoTo ERRORBEENDEN
     
            Set rs = Me![frmArtikelOfferte].Form.RecordsetClone
            rs.MoveLast
            rs.MoveFirst
            If Not (rs.EOF And rs.BOF) Then
            For i = 1 To rs.RecordCount
            
                   
                   'worddoc.Bookmarks("Pharmacode").Select
                   'wordobj.Selection.TypeText Text:=CStr(rs!PH_Code)
                   worddoc.Bookmarks("Bezeichnung").Select
                   wordobj.Selection.TypeText Text:=CStr(rs!Bezeichnung)
                   worddoc.Bookmarks("Generika").Select
                   wordobj.Selection.TypeText Text:=CStr(rs!Generika)
                   
                   If i = rs.RecordCount Then Exit Sub 'Leerzeile vermeiden
                   wordobj.Selection.InsertRows 1
                   wordobj.Selection.Collapse Direction:=wdCollapseStart
                   
                     'wordobj.Selection.MoveRight Unit:=wdCell
                    'With worddoc
                       'Set objBMRange = wordobj.Selection.Range
                             '.Bookmarks.Add Name:="Pharmacode", Range:=objBMRange
                             '.Bookmarks.DefaultSorting = wdSortByName
                             '.Bookmarks.ShowHidden = False
                    'End With
                     wordobj.Selection.MoveRight Unit:=wdCell
                    With worddoc
                     Set objBMRange = wordobj.Selection.Range
                        .Bookmarks.Add Name:="Bezeichnung", Range:=objBMRange
                        .Bookmarks.DefaultSorting = wdSortByName
                        .Bookmarks.ShowHidden = False
                    End With
                        wordobj.Selection.MoveRight Unit:=wdCell
                    With worddoc
                     Set objBMRange = wordobj.Selection.Range
                        .Bookmarks.Add Name:="Generika", Range:=objBMRange
                        .Bookmarks.DefaultSorting = wdSortByName
                        .Bookmarks.ShowHidden = False
                    End With
                      
                rs.MoveNext
                
              Next i
            End If
            rs.Close
            Set rs = Nothing
        End With
        Set worddoc = Nothing
        Set wordobj = Nothing
        Exit Sub
    ERRORBEENDEN:
      Exit Sub
    End Sub
     
    Private Sub DokumentFRZ_Enter()
      Vorlagenordner = Application.CurrentProject.Path
      Dim i As Integer
      Dim Lesefiles As String
      Dim test As Integer
      Dim FS As FileSearch
      Set FS = Application.FileSearch
        With FS
            .LookIn = Vorlagenordner
            .NewSearch
            .SearchSubFolders = False
              'Filter für *.doc einstellen
            .FileName = "*.doc*"
            .Execute
            For i = 1 To .FoundFiles.Count
              Lesefiles = Lesefiles & ";" & Mid(.FoundFiles(i), Len(Vorlagenordner) + 2)
              'Debug.Print Lesefiles
            Next i
        End With
       'Me!comboVorlagenFRZ.RowSourceType = valuelist
        Me!DokumentFRZ.RowSource = Mid(Lesefiles, 2)
    End Sub
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    edgar113 edgar113 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Hallo,
    wie gesagt habe ich nicht viel Ahnung.
    Kann ich denn mit Hilfe rechnen?
    Würde mich sehr weiterbringen.
    Gruß Edgar
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wird das Word-Dokument von Hand geöffnet oder wird es in einem vorhergehenden Programmabschnitt geöffnet?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    edgar113 edgar113 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Das Word-Dokument wir nicht von Hand geöffnet.
    Es wird durch ein externes Programm (Firmeneigene Software) gestartet.
    D.h. ich starte die Firmeneigene Software, wähle den Kunden aus.
    Jetzt starte Die Firmensoftwar das Word-Dokument.
    Für dieses Word-Dokument wird eine Wordvorlage verwendet.
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Also müsstest du euf eine bereits laufende und dir unbekannte Word-Instanz zugreiffen..... Ist mir grad nicht bekannt dass das ginge.

    Du kannst die ProcessIDs aller geöffnet Word-Instancen ermitteln, ggf. sogar welche der Words von der anderen Applikation geöffnet ist, aber dann ist da bals mal fertig lustig.
    Basierend auf http://www.activevb.de/tipps/vb6tipps/tipp0273.html

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
            (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
     
    Private Declare Function ProcessFirst Lib "kernel32" Alias _
            "Process32First" (ByVal hSnapShot As Long, uProcess _
            As PROCESSENTRY32) As Long
     
    Private Declare Function ProcessNext Lib "kernel32" Alias _
            "Process32Next" (ByVal hSnapShot As Long, uProcess _
            As PROCESSENTRY32) As Long
     
    Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass _
            As Long)
     
    Const TH32CS_SNAPPROCESS As Long = 2&
     
    Private Type PROCESSENTRY32
      dwSize As Long
      cntUsage As Long
      th32ProcessID As Long
      th32DefaultHeapID As Long
      th32ModuleID As Long
      cntThreads As Long
      th32ParentProcessID As Long
      pcPriClassBase As Long
      dwFlags As Long
      szExeFile As String * MAX_PATH
    End Type
     
     
    Private Sub GetExeNames()
        Dim hSnapShot As Long, Result As Long
        Dim aa As String, bb As String
        Dim Process As PROCESSENTRY32
     
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
        If hSnapShot = 0 Then Exit Sub
     
        Process.dwSize = Len(Process)
        Result = ProcessFirst(hSnapShot, Process)
      
        Do While Result <> 0
            If Process.szExeFile Like "WINWORD.EXE*" Then
                //Process-ID ins Direktfenster ausgeben
                Debug.Print Process.th32ProcessID
            End If
            Result = ProcessNext(hSnapShot, Process)
        Loop
        Call CloseHandle(hSnapShot)
    End Sub
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Word Dokument drucken und Word schließen
    Von InFlame im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 27.07.11, 12:06
  2. Antworten: 9
    Letzter Beitrag: 18.02.05, 01:14
  3. Antworten: 0
    Letzter Beitrag: 12.12.04, 19:19
  4. Word Dokument via PHP erstellen
    Von hans_schmid im Forum PHP
    Antworten: 15
    Letzter Beitrag: 28.09.04, 09:32
  5. Word-Dokument stürzen?
    Von Oli-bt im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 16.06.04, 15:45

Stichworte