Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: vba worddatei speichern dann schliessen

vba worddatei speichern dann schliessen
10.09.2014 11:12:57
Livio
Ich habe ein Problem mit meiner Makro-Exceldatei.
Durch Klick auf Generate in der Exceldatei soll die Word-Datei geöffnet werden und die DOCPROPERTY-Felder von Word mit Text gefüllt werden. Soweit funktioniert alles.
Wie bringe ich es fertig, dass die Worddatei die Sachen speichert und sich dann wieder schliesst. Unten sind meine Dateien, ich hoffe ihr könnt das ganze gleich in die Datei reincodieren.
https://www.herber.de/bbs/user/92565.zip
Vielen Dank im Voraus

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba worddatei speichern dann schliessen
10.09.2014 13:03:48
fcs
Hallo Livio,
Ein "Generate" hab ich jetzt nicht gefunden.
Ich hatte allerdings Problem unter Word 2010 mit dem Logo/Grafik in der Kopfzeile der Worddatei (irgendwie fehlt plötzlich Arbeitsspeicher).
Nachfolgend das anzupassende Makro zum Speichern und Schließen der WOrddatei und Beenden der Word-Instanz. Die verschobene und die beiden neuen Zeilen hab ich markiert.
Gruß
Franz
Sub cmdInTextfeldschreiben()
'Variablen definieren
Dim wdApp As Object
Dim wdDoc1 As Object
Dim wdRng As Object
Dim wdCustProp As Object
Dim wdDatei1 As String
Dim wb As Excel.Workbook
'Dim ws As Excel.Worksheet
'Arbeitsmappe mit diesem Makro
Set wb = ThisWorkbook
'Set ws = wb.Worksheets("Sheet1")
'Word als Object starten
Set wdApp = CreateObject("Word.Application") 'Word als Object starten
wdApp.Visible = True                      '##### Zeile verschoben ##### 2014-09-10
'Worddatei festlegen - befindet sich im gleichen Verzeichnis wie diese Excel-AM
wdDatei1 = wb.Path & "\Worddatei.doc"
Set wdDoc1 = wdApp.Documents.Open(wdDatei1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' _
With wdDoc1
On Error Resume Next
Set wdCustProp = .CustomDocumentProperties("Client")
If Not (wdCustProp Is Nothing) Then
.CustomDocumentProperties("Client").Value = [Client].Value
Else
MsgBox "Die Word-Property 'Client' existiert nicht!", 64, "zur Information"
End If
Set wdCustProp = .CustomDocumentProperties("ProjectName")
If Not (wdCustProp Is Nothing) Then
.CustomDocumentProperties("ProjectName").Value = [Project_Number].Value
Else
MsgBox "Die benutzerdefinierte Word-Property 'ProjectName' existiert nicht!", _
64, "zur Information"
End If
Set wdCustProp = .CustomDocumentProperties("Consultant")
If Not (wdCustProp Is Nothing) Then
.CustomDocumentProperties("Consultant").Value = [Consultant].Value
Else
MsgBox "Die benutzerdefinierte Word-Property 'ProjectName' existiert nicht!", _
64, "zur Information"
End If
Set wdCustProp = .CustomDocumentProperties("OrderNo")
If Not (wdCustProp Is Nothing) Then
.CustomDocumentProperties("OrderNo").Value = [Order_Number].Value
Else
MsgBox "Die benutzerdefinierte Word-Property 'OrderNo' existiert nicht!", _
64, "zur Information"
End If
'On Error GoTo 0
.CustomDocumentProperties.Update
.Save
'alle Felder aktualisieren
For Each wdRng In .StoryRanges
wdRng.Fields.Update
While Not (wdRng.NextStoryRange Is Nothing)
Set wdRng = wdRng.NextStoryRange
wdRng.Fields.Update
Wend
Next wdRng
.Close savechanges:=True    '##### Zeile neu ##### 2014-09-10
End With
wdApp.Quit                      '##### Zeile neu ##### 2014-09-10
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' _
Set wdRng = Nothing
Set wdDoc1 = Nothing
Set wdCustProp = Nothing
Set wdApp = Nothing
'Set ws = Nothing
Set wb = Nothing
End Sub

Anzeige
AW: vba worddatei speichern dann schliessen
10.09.2014 15:12:24
Livio
Danke es funktioniert alles
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

VBA: Word-Datei speichern und schließen


Schritt-für-Schritt-Anleitung

Um eine Word-Datei über ein Excel-Makro zu speichern und zu schließen, kannst Du den folgenden VBA-Code verwenden. Dieser Code öffnet die Word-Datei, aktualisiert die benutzerdefinierten Dokumenteigenschaften und schließt die Datei anschließend. Hier ist ein Beispiel:

Sub cmdInTextfeldschreiben()
    'Variablen definieren
    Dim wdApp As Object
    Dim wdDoc1 As Object
    Dim wdRng As Object
    Dim wdCustProp As Object
    Dim wdDatei1 As String
    Dim wb As Excel.Workbook

    'Arbeitsmappe mit diesem Makro
    Set wb = ThisWorkbook

    'Word als Object starten
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = True

    'Worddatei festlegen
    wdDatei1 = wb.Path & "\Worddatei.doc"
    Set wdDoc1 = wdApp.Documents.Open(wdDatei1)

    With wdDoc1
        On Error Resume Next
        ' Aktualisieren der benutzerdefinierten Word-Properties
        Set wdCustProp = .CustomDocumentProperties("Client")
        If Not (wdCustProp Is Nothing) Then
            .CustomDocumentProperties("Client").Value = [Client].Value
        End If

        ' Mehrere benutzerdefinierte Eigenschaften aktualisieren...

        .CustomDocumentProperties.Update
        .Save
        ' Alle Felder aktualisieren
        For Each wdRng In .StoryRanges
            wdRng.Fields.Update
            While Not (wdRng.NextStoryRange Is Nothing)
                Set wdRng = wdRng.NextStoryRange
                wdRng.Fields.Update
            Wend
        Next wdRng
        .Close savechanges:=True
    End With

    wdApp.Quit

    ' Objekte freigeben
    Set wdRng = Nothing
    Set wdDoc1 = Nothing
    Set wdCustProp = Nothing
    Set wdApp = Nothing
    Set wb = Nothing
End Sub

Häufige Fehler und Lösungen

  • Fehler: "Die benutzerdefinierte Word-Property existiert nicht!"

    • Lösung: Stelle sicher, dass die benutzerdefinierten Eigenschaften in der Word-Datei tatsächlich existieren. Überprüfe die Schreibweise und die Groß-/Kleinschreibung.
  • Fehler: Word-Anwendung bleibt geöffnet

    • Lösung: Achte darauf, dass wdApp.Quit am Ende des Codes aufgerufen wird, um die Word-Anwendung zu schließen.

Alternative Methoden

Wenn Du keine Makros verwenden möchtest, kannst Du auch die "Serielle" Methode in Excel ausprobieren. Du könntest die Daten manuell in ein Word-Dokument kopieren und dort speichern. Dies ist jedoch weniger effizient, besonders bei großen Datenmengen.


Praktische Beispiele

Ein praktisches Beispiel wäre, wenn Du ein Word-Dokument hast, das regelmäßig aktualisiert werden muss, z.B. für Berichte oder Protokolle. Du kannst das obige Makro anpassen, um spezifische Felder wie "Projektnummer" oder "Berichtsdatum" zu aktualisieren.


Tipps für Profis

  • Verwende Error Handling: Füge On Error GoTo ErrorHandler und am Ende des Codes einen ErrorHandler hinzu, um Fehler besser zu behandeln.
  • Optimierung: Stelle sicher, dass Du die Sichtbarkeit der Word-Anwendung nur dann aktivierst, wenn es unbedingt nötig ist, um die Performance zu optimieren.

FAQ: Häufige Fragen

1. Kann ich das Makro in jeder Excel-Version verwenden? Ja, aber stelle sicher, dass Du die richtige VBA-Syntax für Deine Excel-Version verwendest.

2. Wie kann ich die Word-Datei an einem anderen Ort speichern? Ändere die wdDatei1-Variable auf den gewünschten Pfad, z.B. wdDatei1 = "C:\DeinPfad\Worddatei.doc".

3. Was muss ich tun, wenn das Word-Dokument nicht geöffnet werden kann? Überprüfe, ob der Pfad zur Word-Datei korrekt ist und ob die Datei tatsächlich vorhanden ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige