Loop until Excel closes

Hallo zusammen,

ich habe eine Excel Datenbank die mir die naechste Zeichnungsnummer generiert.
Mein Problem besteht darin, das ich eine Until Loop einbringen moechte, wenn Excel schon von einem anderem User benutzt wird. Sobald Excel geschlossen wird, ist der andere User in der Lage die Datenbank zu beschreiben bzw die Schleife beendet.
Mein Code funktioniert bis auf wenn Excel von einem anderen benutzt wird, das mein Programm haengen bleibt obwohl auch der andere User Excel beendet hat.

Fuer jeden Tip waere ich dankbar...

HTML:
 Dim fuse As System.IO.FileStream
        Dim excelInUse As Boolean = True

        Try
            fuse = System.IO.File.Open(TextBox10.Text, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
            excelInUse = False
            fuse.Close()
        Catch ex As Exception
            '  MessageBox.Show("blabla")
            Do
                excelInUse = True
            Loop Until excelInUse = False
        End Try

'Hier wird Excel gestartet und beschrieben.
 
Dein Programm bleibt nicht hängen, es hat nur viel zu tun mit diesen drei Zeilen
Visual Basic:
Do
    excelInUse = True
Loop Until excelInUse = False

Wie soll man da jemals wieder rauskommen?

Du musst das öffnen der Datei in eine Funktion auslagern, welche dir den FileStream zurück gibt. Innerhalb der Funktion versuchst du in einer Schleife die Datei zu öffnen. Wenn es fehl schlägt, wartest du eine Zeit ab und versuchst es dann wieder (Das "wieder versuchen" ergibt sich durch die Schleife ja automatisch). Sobald es geklappt hat, lieferst du den Steam zurück.
 
Hallo zusammen,

ich komme einfach nicht weiter und hoffe, dass mir jemand hier mehr weiterhelfen kann.
Ich verstehe das das program nicht aus der Schleife raus kommt, jedoch wie stelle ich es an,
das das programm wieder abfragt ob Excel geoeffnet ist oder nicht.
Hier ist was ich dachte, was den Job machen wuerde.

HTML:
Dim fuse As System.IO.FileStream
        Dim excelInUse As Boolean = True

        Try
            fuse = System.IO.File.Open(TextBox10.Text, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
            excelinuse = False
            fuse.Close()

            If excelInUse = False Then TextBox14.Text = "0"

        Catch ex As Exception
            Timer1.Start()
            If TextBox15.Text = "10" Then
                Timer1.Stop()
                TextBox15.Text = "1"
            End If

            Do Until TextBox14.Text = "0"

                If excelInUse = True Then TextBox14.Text = "1"

                If excelInUse = False Then TextBox14.Text = "0"
            Loop
        End Try
 
Jemand eine Idee wie ich aus der Schleife herauskomme? oder wie mein Program kontrolliert bzw. abfragt ob Excel noch geoeffnet ist oder schon geschlossen ist?

Waere fuer eine Loesung oder guten Ratschlag sehr Dankbar...
 
Hi.

Du kannst die System.Diagnostics.Process Klasse benutzen, um Infos über deinen Excel Prozess zu bekommen. (via Process.GetProcessesByName("excel"))

Das Process-Objekt bietet dir dann 2 Möglichkeiten an:
* die process.WaitForExit()-Methode
oder
* das process.Exited Event.

Das Event ist bei einem grafischen Programm vorzuziehen, da WaitForExit den Programm blockiert. Ein Beispiel wie du das Event benutzen kannst, gibts auf der verlinkten Seite. Der Unterschied zu dir ist jedoch, das du keinen neuen Prozess starten willst, sondern via Process.GetProcessesByName an das laufende Programm kommst.

lg,..
 
Hallo nochmal,

also ich hatte deien Tip ausprobiert jedoch funktionierte diese leider nicht so wie ich es gewuenscht hatte. Daher habe ich einen neuen Button auf meine Form gebracht und folgenden Code ausgefuehrt um zu sehen ob dies funktioniert oder nicht.

Folgender Code funktioniert nicht:

Dim myProcess As Process = System.Diagnostics.Process.Start(TextBox10.Text)
myProcess.WaitForExit()
' display results
MessageBox.Show("Excel was closed at: " & _
myProcess.ExitTime & "." & _
System.Environment.NewLine & "Exit Code: " & _
myProcess.ExitCode)
myProcess.Close()


In Textbox10.text habe ich mein Verzeichnis geschrieben, wo praktisch das Excel Document ist.
Ich bekomme folgenden Fehler bei myprocess.waitforexit ("Null Reference Exeption wurde nicht behandelt. Object reference not set to an instance of an object.")

Wenn ich jedoch statt textbox10.text einfach nur "Excel" habe, wird dieser Process ausgefuehrt. Sollte das nicht auch fuer das einzelne Dokument so sein?
 
Hoi..

Sollte das nicht auch fuer das einzelne Dokument so sein?

Klar würde das funktionieren, nur:

In Textbox10.text habe ich mein Verzeichnis geschrieben, wo praktisch das Excel Document ist.

Du hast doch selber geschrieben, dass du nicht das Dokument öffnest, sondern das Verzeichnis in dem das Dokument ist. Gib mal den gesamten Pfad inklusive Dateinamen an, und probiere nochmal. ;)

lg..
 
Hi,

Also ich habe den kompletten Pfad plus den Dateinamen.xlsx angegeben, jedoch bekomme ich weiterhin einen Fehler bei myprocess.waitforexit.

Ich verstehe es einfach nicht...

Vielen Dank fuer deine Hilfe
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück