Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Problem beim Schliessen Worddokument
11.12.2020 09:08:11
Peter
Hallo,
ich benötige dringend eure Hilfe. Ich habe eine sehr umfangreiche Exceldatei. In einer älteren Version kein Fehler. In neuerer Version kommt eine Messagebox mit folgendem Hinweis:
"Microsoft VBA Objekt variable oder With Blockvariable nicht festgelegt" mit OK Button und Hilfe Button.
Ich habe keine Erklärung dafür, warum dieses Ereignis ausgelöst wird. Ich weiss nur, dass diese Meldung dann kommt, wenn beim Beenden an der Zeile:
.Close False
ausgelöst wird.
Hier meine Codes zum Öffnen und Schliessen der Worddokuments:

Option Explicit
Private WrdApp As Object, wrdDoc As Object
Private strDName As String
Private strPfad As String
Private strName As String
'Word öffnen2
Private Sub CommandButton14_Click()
Dim wrdApp2 As Object
Dim strDName As String
Dim wrdDocV As Object   'für öffnen der Wordvorlage
Dim Pfad As String
Application.ScreenUpdating = False
'Anfang Prüfung ob Listbox2 markiert ist
If ListBox2.ListIndex > -1 Then
'    MsgBox "markiert"
Label45.Caption = vbLf & ""
Label45.Visible = False
'Hier wird der Dateiname der WORD-Vorlage erstellt - bitte anpassen !
Pfad = Worksheets("Worddaten").Range("B26")
'Debug.Print Pfad
strDName = Pfad & ListBox2.Value
'Debug.Print strDName
On Error Resume Next
Set wrdApp2 = GetObject(, "Word.Application")
If wrdApp2 Is Nothing Then
Set wrdApp2 = CreateObject("Word.Application")
End If
Application.DisplayAlerts = False
Set wrdApp2 = CreateObject("Word.Application")
'wrdApp2.Visible = True      'Word sichtbar
wrdApp2.Visible = False      'Word nicht sichtbar
wrdApp2.WindowState = 1 '0 = Normal; 1 = Maximized; 2 = Minimized
Set wrdDocV = wrdApp2.Documents.Open(strDName)
Application.DisplayAlerts = True
'Anfang Dokumentenvorlage schliessen
wrdApp2.Documents(strDName).Close False
wrdApp2.Quit 'Fehler
'Ende Dokumentenvorlage schliessen
'Anfang öffnen Dokument1 der Vorlage
CommandButton16 = True  'Dokument1 aus Wordvorlage öffnen
'Ende öffnen Dokument1 der Vorlage
'Aufheben der Settings
Set wrdDocV = Nothing
Set wrdApp2 = Nothing
ElseIf ListBox2.ListIndex = -1 Then
'    MsgBox "nicht markiert"
Label45.Visible = True
Label45.Caption = "      bitte Word-Brief-Vorlage auswählen!"
Exit Sub
End If
End Sub
'Dokument1 Wordvorlage öffnen
Private Sub CommandButton16_Click()
'Wichtig! Die Deklarationen müssen damit CommandButton2 richtig ausgeführt wird für alles  _
in der Zeile direkt unter Option Explicit stehen
'Anfang öffnen Dokument1 der Vorlage
strPfad = Worksheets("Worddaten").Range("B26").Value  'Pfad für Vorlagen
strName = ListBox2.Value                             'Name der Vorlage mit Endung
strDName = strPfad & strName                        'Pfad und Name für Vorlagen
Set WrdApp = CreateObject("Word.Application")       'öffnet Word
WrdApp.Visible = True                               'zeigt geöffnetes Word an - False würde  _
es nicht anzeigen
WrdApp.WindowState = 1                              'öffnet Word in maximal Ansicht (1)
Set wrdDoc = WrdApp.Documents.Add(strDName)         'öffnet das Dokument1 der Vorlage
With Label31
.BackColor = &HC0FFC0
.Caption = "Dokument1 aus Vorlage" & vbLf & strDName & vbLf & "wurde geöffnet!"
End With
CommandButton15.Enabled = True
'Ende öffnen Dokument1 der Vorlage
'' Settings dürfen nicht aufgehoben werden, da sonst schliessen nicht funktioniert
'  Set wrdDoc = Nothing
'  Set appWord = Nothing
End Sub
Dieses Öffnen funktioniert einwandfrei.

'Dokument1 aus Word-Vorlage speichern und schreibgeschützt schliessen
Private Sub CommandButton15_Click()
Dim PathFile As String
Dim strPfad As String
Dim strDokName As String
Dim strEndung As String
Dim strNeu As String
Dim strFile As String
Dim Eingabe As String
Dim strFile2 As String
Dim strDok As String
Dim strDokNeu As String
'Anfang Dokument1_Basis mit neuem Namen speichern
strPfad = Worksheets("Worddaten").Range("B28").Value    '"C:\Users\Peter\Desktop\Neuer  _
Ordner\Dokumente\"
strDokName = Left(ListBox2, Len(ListBox2) - 5) & "_" & Right(TextBox1, 4)   '"Dokument1" '&  _
"_"
strEndung = ".docx"
strDokNeu = strPfad & strDokName & strEndung
'Debug.Print strDokNeu
'Ende   Dokument1_Basis mit neuem Namen speichern
If Not WrdApp Is Nothing Then
On Error Resume Next
With wrdDoc
If Dir(strDokNeu) = "" Then           'wenn kein Dokument vorhanden ist
'MsgBox "Datei fehlt!"
.SaveAs Filename:=strDokNeu
.Close True
'Anfang Schreibschutz für erstellte Datei setzen
VBA.FileSystem.SetAttr (strDokNeu), 1      '1 = ReadOnly - 0 = lesen und  _
schreiben
'Ende Schreibschutz für erstellte Datei setzen
'MsgBox "Das Dokument wurde im Ordner: " & strDokNeu & " schreibgeschützt -  _
gespeichert!"
Label39.Font.Size = 12
Label39.Caption = "Das Dokument wurde im Ordner: " & strDokNeu & " schreibgeschü _
tzt - gespeichert!"
Else
'MsgBox "Datei vorhanden"
If MsgBox("Wollen Sie das Dokument mit neuem Namen speichern?", vbOKCancel, " _
Meldung1") = vbOK Then
Do
Eingabe = InputBox("Bitte den Namenzusatz eingeben")
If StrPtr(Eingabe) = 0 Then Exit Sub
Loop While Eingabe = vbNullString
strFile2 = strPfad & strDokName & Eingabe & strEndung
'Debug.Print strFile2
'Anfang nochmalige Prüfung für strFile2
If Dir(strFile2) = "" Then           'wenn kein Dokument vorhanden ist
'MsgBox strFile2 & " nicht vorhanden"
.SaveAs Filename:=strFile2
.Close True
'Anfang Schreibschutz für erstellte Datei setzen
VBA.FileSystem.SetAttr (strFile2), 1      '1 = ReadOnly - 0 = lesen und  _
schreiben
'Ende Schreibschutz für erstellte Datei setzen
'MsgBox "Das Dokument wurde im Ordner: " & strFile2 & " schreibgeschü _
tzt - gespeichert!"
Label39.Font.Size = 12
Label39.Caption = "Das Dokument wurde im Ordner: " & strFile2 & "  _
schreibgeschützt - gespeichert!"
Else
'MsgBox strFile2 & " vorhanden"
Do
Eingabe = InputBox("Bitte anderen Namenzusatz eingeben - da  _
bereits vorhanden")
If StrPtr(Eingabe) = 0 Then Exit Sub
Loop While Eingabe = vbNullString
strFile2 = strPfad & strDokName & Eingabe & strEndung
'Debug.Print strFile2
.SaveAs Filename:=strFile2
.Close True
'Anfang Schreibschutz für erstellte Datei setzen
VBA.FileSystem.SetAttr (strFile2), 1      '1 = ReadOnly - 0 = lesen  _
und schreiben
'Ende Schreibschutz für erstellte Datei setzen
'MsgBox "Das Dokument wurde im Ordner: " & strFile2 & "  _
schreibgeschützt - gespeichert!"
Label39.Font.Size = 12
Label39.Caption = "Das Dokument wurde im Ordner: " & strFile2 & "  _
schreibgeschützt - gespeichert!"
End If
'Ende nochmalige Prüfung für strFile2
Else
'MsgBox "Abbruch - das Dokument wurde nicht gespeichert"
Label39.Font.Size = 12
Label39.Caption = "Abbruch - das Dokument wurde nicht gespeichert"
.Close False         !!! hier wird die Meldung ausgelöst !!!
If WrdApp.Documents.Count = 0 Then WrdApp.Quit      'beendet Word nur wenn  _
kein weiteres Word geöffnet ist
CommandButton14.Enabled = False
CommandButton15.Enabled = False
ListBox2.Enabled = True
End If  'End if für Msgbox("Wollen Sie
End If  'End if für Dir(strDokNeu)
End With    'End with für wrdDoc
End If    'End if für wrdApp
If WrdApp.Documents.Count = 0 Then WrdApp.Quit      'beendet Word nur wenn kein weiteres  _
Word geöffnet ist
On Error GoTo 0
Set wrdDoc = Nothing
Set WrdApp = Nothing
'da Dokument1 unter neuem Namen in Ordner "Dokumente" gespeichert wird, muss u.a. Makro  _
ausgeführt werden
Call Word_Dokumente_auflisten
Call ListBox3_aktualisieren
CommandButton13 = True
ListBox2.Enabled = True
CommandButton14.Enabled = False
CommandButton15.Enabled = False
CommandButton8 = True   'Auswahl löschen
Label31.Caption = "Die Datei " & """" & (Worksheets("Worddaten").Range("B24")) & """" & "  _
wurde geschlossen!"
Label39.Caption = vbLf & vbLf & "  Bitte neue Auswahl treffen oder mittels Button ""Beenden" _
" das Formular schliessen!"
End Sub
In der Zeile in CommandButton15 habe ich einen Hinweis "Fett" geschrieben eingefügt.
Könnt ihr mir bitte helfen.
Leider kann ich die Arbeitsmappe nicht hochladen, da extrem gross.
Gruss
Peter

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

Betreff
Datum
Anwender
Anzeige
AW: Problem beim Schliessen Worddokument
11.12.2020 11:59:51
Herbert_Grom
Hallo Peter,
wenn du willst, dass wir dir helfen, dann musst du dir schön die Mühe machen, deine BSP-Datei so zu verkleinern, dass sie die 300kb nicht übersteigt, aber trotzdem aussagefähig bleibt!
Servus
AW: gefunden
12.12.2020 16:49:41
Peter
Hallo Herbert,
danke für Deine Idee. Aber diese Datei umzubauen auf die zulässige Grösse wäre eine irrsinnige Arbeit.
Ich habe den Fehler jedoch gefunden.
Ich habe das Makro in der Wordvorlage als Auto_Exit eingebaut. Dadurch wurde das Worddorkument geändert und auch beendet. Dadurch konnte in Excel das Makro nicht zu Ende geführt werden wodurch die beschriebene Fehlermeldung erfolgte.
Problem beseitigt durch:
In das Modul1 der Wordvorlage habe ich das Makro eingefügt:

Sub Umwandeln_Mergeformat_zu_Charformat()
'Anfang Umwandlung von Mergeformat in Charformat
ActiveWindow.View.ShowFieldCodes = True    'Word-VBA öffnen
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "\* mergeformat"
.Replacement.Text = "\* charformat"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveWindow.View.ShowFieldCodes = False    'Word-VBA schliessen
'Anfang Umwandlung von Mergeformat in Charformat
End Sub
und vor der Prüfung zum Schliessen habe ich eingefügt:

'Anfang Umwandeln von Mergeformat auf Charformat
wrdDoc.Application.Run "Umwandeln_Mergeformat_zu_Charformat"
'Ende Umwandeln von Mergeformat auf Charformat
Jetzt klappt alles bestens.
Gruss
Peter
Anzeige

143 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige