Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Outsider77

Erfahrenes Mitglied
Guten Morgen!
Ich bräuchte bitte Hilfe bei folgendem Problem:
Ich habe ein kleines Programm geschrieben, mit dem wir hier in der Firma
vereinfacht Etiketten drucken.
Dazu habe ich eine Form mit einigen Button und ListBoxen erstellt.
In einer der ListBoxen wird eine Auswahl (einfach oder mehrfach) getroffen.
Das sind eigentlich .txt-Dateien, in denen die Informationen für die Etiketten stehen.
Wenn jetzt auf den Drucken-Button geklickt wird, öffnet sich ein bestehendes
Word-Dokument, erstellt als Serienbrief-Vorlage.
Die Informationen aus den .txt-Dateien werden in den Serienbrief gelesen und
die Etiketten werden erstellt.
Bis hierher läuft alles bestens. Nach dem Etiketten erstellen lasse ich noch
eine kleine Sub laufen, welche in dem erstellten Etiketten-Dokument einige Werte
suchen und ersetzen soll. Und hierbei kommt folgende Fehlermeldung:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Hier mal der Code für Serienbrief und suchen/ersetzen:
Code:
Sub Mailmerge()
        Dim mwapp As Object
        mwapp = CreateObject("Word.Application")
        While Form1.TextBox2.Text <> ""
            Artikelname = Form1.TextBox2.Text
            mwapp.windowstate = 1
            mwapp.visible = True
            mwapp.Documents.Open("G:\HUDDEL\Endlosetiketten.docx", , True)

            mwapp.ActiveDocument.MailMerge.OpenDataSource(Name:="G:\HUDDEL\Etiketten\" & Artikelname, ConfirmConversions:=False, ReadOnly:= _
            False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
            WritePasswordTemplate:="", Revert:=False, Connection:="", SQLStatement:="", SQLStatement1:="")
            With mwapp.ActiveDocument.MailMerge
                .SuppressBlankLines = True
                .Execute(Pause:=False)
            End With
            Form1.TextBox2.Text = ""

            Größengänge()

            If My.Computer.FileSystem.FileExists("C:\temp.docx") Then
                My.Computer.FileSystem.DeleteFile("C:\temp.docx")
            End If

            mwapp.ActiveDocument.SaveAs("c:\temp.docx")
            mwapp.activedocument.close()
            mwapp.application.quit()
            mwapp = Nothing

        End While
    End Sub

Sub Größengänge()
        Dim msw As New Microsoft.Office.Interop.Word.Application

        msw.Selection.Find.ClearFormatting()
        msw.Selection.Find.Replacement.ClearFormatting()
        
        With msw.Selection.Find
            .Text = "1-2(1)"
            .Replacement.Text = "1-2"

        End With
        msw.Selection.Find.Execute(Replace:=msw.wdreplaceAll)

        With msw.Selection.Find
            .Text = "1.5-1.5(1.5)"
            .Replacement.Text = "1.5"

        End With
        msw.Selection.Find.Execute(Replace:=msw.wdreplaceAll)
.
.
.
End Sub

Ich habe den Code für Mailmerge und Größengänge zum Zeigen etwas reduziert.
Die Fehlermeldung tritt in dieser Zeile auf (siehe Anhang).
Beim Erstellen eines Serienbriefes wird ja zusätzlich zur eigentlichen Vorlage
ein zweites Dokument erstellt. Vielleicht liegt hierbei mein Problem.
Ich bin über jede Hilfe dankbar! Bei Unklarheiten bitte fragen!
Vielen Dank schonmal!
Gruß Outi
 

Anhänge

  • fehlermeldung.jpg
    fehlermeldung.jpg
    65,9 KB · Aufrufe: 105
Guten Morgen!
Ich habe zumindest einen Teil des Problems selber beheben können.
Ich habe anscheinend die Word-Application falsch angesprochen.
Mittels
Code:
Public mwapp As New Microsoft.Office.Interop.Word.Application
läuft es zunächst erstmal.
Allerdings auch nur einmal, dann kommt eingangs erwähnte Fehlermeldung erneut.
Ich habe einen Vorschau-Button, über den folgender Code durchlaufen wird:
Code:
Sub Mailmerge2() 'Vorschau

        While Form1.TextBox2.Text <> ""
            Artikelname = Form1.TextBox2.Text
            Form1.Hide()
            mwapp.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMaximize
            mwapp.Visible = False
            mwapp.Documents.Open("C:\Endlosetiketten.docx", , True)

            mwapp.ActiveDocument.MailMerge.OpenDataSource(Name:="C:\Etiketten\" & Artikelname, ConfirmConversions:=False, ReadOnly:= _
            False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
            "", Revert:=False, Connection:="", SQLStatement _
            :="", SQLStatement1:="")
            With mwapp.ActiveDocument.MailMerge
                .SuppressBlankLines = True
                .Execute(Pause:=False)
            End With
            Form3.Show()
            Form3.ProgressBar1.Value = 5
            Form1.TextBox2.Text = ""

            Größengänge()

            If My.Computer.FileSystem.FileExists("C:\temp.doc") Then
                My.Computer.FileSystem.DeleteFile("C:\temp.doc")
            End If
            mwapp.ActiveDocument.SaveAs("c:\temp.doc")

            mwapp.ActiveWindow.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMaximize
            mwapp.Visible = True
            Form2.Show()
            Form2.BringToFront()
        End While
    End Sub
Bis hierher funktioniert beim ersten Durchlauf alles. Ich sehe die erstellten Etiketten
und die Form2, welche einen Abbrechen-Button und einen Drucken-Button enthält.
Über Abbrechen gelange ich wieder zu Form1.
Code:
Private Sub Vorschauabbruch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Vorschauabbruch.Click
        Me.Close()
        mwapp.ActiveDocument.Close(SaveChanges:=False)
        mwapp.Application.Quit(SaveChanges:=False)
        mwapp = Nothing
        Form1.Show()
        Directory()
        Listenabgleich()
    End Sub
Wenn ich jetzt erneut Mailmerge2 aufrufe, bringt er mir die Fehlermeldung,
und zwar in dieser Zeile:
Code:
mwapp.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMaximize
Kann es sein, dass ich die Word-Application nicht korrekt schließe/beende?
Ich brauche bei diesem Problem wirklich Hilfe, weil ich mich schon tagelang damit "rumquäle".
Und noch eine kleine Sache: auf Form3 habe ich eine Progress-Bar und ein Label.
Egal, wie ich es auch anstelle. Das Label ist immerzu transparent, obwohl die
BackColor-Eigenschaft auf "Control" steht.
Vielen Dank schonmal!
Grüße Outi
 
So...mittlerweile hab' ich das Problem selbst in den Griff bekommen.
Vielleicht ist das nicht die eleganteste Lösung, aber es funktioniert.
Habe einfach nach jedem
Code:
mwapp = Nothing
diese Variable neu gesetzt mittels
Code:
mwapp = New Microsoft.Office.Interop.Word.Application
Also, vielen Dank für die "Hilfe" :)
Allerdings habe ich immer noch das Problem mit dem transparenten Label.
Ich kann praktisch durch die Form durch sehen bis auf den Desktop.
Kann mir da wirklich niemand helfen?
 
Moin Spyke!
Also BS ist Win XP SP 3 und aktuelle Framework ist 3.5 SP1.
Der Screenshot sollte gut zu erkennen sein.
Gruß
 

Anhänge

  • label-transparent.JPG
    label-transparent.JPG
    20,6 KB · Aufrufe: 70
Ich arbeite mit Framework 2.
Und sowas hab ich noch nie gesehen.

Das ist ein normales Label, du machst da nixs extra über Paint Ereignis oder so?

Du könntest mal schaun obs auf einem anderen Rechner läuft.
Funktionieren Labels bei den anderen Projekten?

Meine Vermutung wäre jetzt das eventuell Framework neu installiert werden müsste.
 
Ja, das ist ein normales Label. Wie auf Form 1 auch und da ist es nicht transparent.
Das i ist sowieso für einen anderen Rechner gedacht, da werde ich ja sehen,
wie sich das dort darstellt. Aber mit Paint-Ereignis arbeite ich hier nicht.
Bei allen anderen, vorher erstellten Projekten gab es dieses Problem nicht.
Könnte es vielleicht mit der Progress-Bar zusammenhängen?
Weil die hatte ich bis jetzt in keinem anderen Projekt benutzt.

Mir ist aber noch eine Frage eingefallen:
ich erstelle mir ja mit dem Programm Etiketten, die ich mir auch vorher in einer Art
Vorschau ansehen kann. Das sieht auch alles sehr gut aus. Es sind immer 6 Etiketten
pro Reihe und je nach dem eine oder mehrere Reihen. Wenn ich dann aber drucke,
bleibt der Lexmark nach der ersten Reihe stehen. Kannst Du Dir das erklären?

Ansonsten vielen Dank bisher für Deine Hilfe!
 
Zum ersten, nimm die Progressbar einfach mal raus.
Wäre aber dann schon ein komisches verhalten.

Ist zwar etwas weiter hergeholt, aber eventuell stimmt ja auch was mit dem Grafiktreiber nicht.

Ansonsten siehste bin ich eigentlich auch blos noch am raten :)
Und google kannste in dem Fall echt vergessn.

Zum zweiten, sorry hab noch nie in der Programmierung auf Word zugegriffen.
 
Also auch wenn ich die ProgressBar rausnehme, ist das Label
immer noch transparent.
Ich mach das einfach ohne Label, muß halt so gehen.
Ich danke Dir trotzdem!
 
Interessant wäre noch ob es nur in der Debug Version Transparent ist oder auch im Release.

Eventuell kommt das Problem auch vom Studio selbst.
 

Neue Beiträge

Zurück