ERLEDIGT
NEIN
NEIN
ANTWORTEN
16
16
ZUGRIFFE
2114
2114
EMPFEHLEN
-
16.10.10 08:10 #1
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
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-Code: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
Code vb:1 2 3
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.
-
18.10.10 12:38 #3
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
danke fuer deinen andenkstoss... Leuchtet mir jetzt auch ein.
-
04.12.10 12:41 #4
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
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-Code: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
-
23.02.11 06:45 #5
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
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...
-
23.02.11 14:44 #6
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
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,..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
26.02.11 03:34 #7
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
Hallo,
danke fuer deine schnelle antwort, werde es mal ausprobieren...
-
27.02.11 03:20 #8
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
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?
-
27.02.11 03:43 #9
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hoi..
Klar würde das funktionieren, nur:Sollte das nicht auch fuer das einzelne Dokument so sein?
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.In Textbox10.text habe ich mein Verzeichnis geschrieben, wo praktisch das Excel Document ist.
lg..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
27.02.11 04:28 #10
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
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 HilfeGeändert von hausmeister079 (27.02.11 um 04:37 Uhr)
-
27.02.11 13:31 #11
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Ist Excel schon offen bevor du dein Programm testest?
Wenn ja, wird die Datei im bereits gestarteten Excel geöffnet und kein neuer Prozess gestartet. Daher ist der Rückgabewert von Process.Start null.
Testen kannst du das, in dem du die bereits von mir genannte Process.GetProcessesByName-Methode verwendest, und nachsiehst ob du Excel findest.
lg..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
28.02.11 04:58 #12
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
Hallo,
nein habe es nochmal auf einer anderen Maschine getestet und auch nichts.
Habe nochmal komplett von vorne angefangen um Fehler auszufiltern.
Habe eine neue Windows Applikation erstellt wo ich nur auf meiner Form ein Button habe.
In diesem Button habe ich folgendes stehen:
Dim TestProcess() As Process
> > Try
> > TestProcess= Process.GetProcessesByName("2DDrwg")
> > If TestProcess.Length = 0 Then
> > MsgBox("Not running", MsgBoxStyle.OKOnly)
> > Else
> > MsgBox("Running", MsgBoxStyle.OKOnly)
> > End If
> > Catch ex As Exception
> > MsgBox("Error!")
> > End Try
So ich bekomme auch mit diesem Code keine richtige Antwort, ob das Document geschlossen oder geoeffnet ist, bekomme ich die selbe messagebox welche sagt "Not running"****?
Ich habe sogar mit kompletten Pfad und dateinamen versucht, doch auch nichts.
Noch eine andere Idee****?
-
28.02.11 19:18 #13
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Mal zuerst ein Hinweis: setze deine Codeauszüge doch bitte in die passenden Code-Tags, bei VB.net wäre dies [ vbnet ] - dann lässt sich das ganze besser lesen.
Zu deinem Problem.. was soll "2DDrwg" sein? Wenn du sehen willst ob Excel läuft, müsstest du Process.GetProcessesByName("Excel") verwenden.With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
01.03.11 01:51 #14
- Registriert seit
- May 2008
- Ort
- Sydney, Australien
- Beiträge
- 87
Also ich habe diesmal statt "2DDrwg" "Excel" geschrieben und dieses ausgefuehrt mit Excel geoffnet und ohne, jedoch auch hier bekomme ich jedesmal die gleiche Messagebox Benachrichtigung.
Muss ich vielleicht irgendeine Properties aendern?Dim TestProcess() As Process
Try
TestProcess= Process.GetProcessesByName("Excel")
If TestProcess.Length = 0 Then
MsgBox("Not running", MsgBoxStyle.OKOnly)
Else
MsgBox("Running", MsgBoxStyle.OKOnly)
End If
Catch ex As Exception
MsgBox("Error!")
End Try
-
01.03.11 02:00 #15
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Normalerweise sollte es so funktionieren, alle von mir erwähnten Methoden etc hab ich nochmal ausprobiert bevor ich sie hier gepostet habe.
Du kannst gerne auch mal mit Process.GetProcesses arbeiten und nachsehen was für Elemente du da so findest, und welche Namen da bei den einzelnen Objekten hinterlegt sind.
Ein wenig mit den Klassen rumspielen, ausprobieren, debuggen, Doku lesen schadet nie...
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
Ähnliche Themen
-
Excel Datenbank mit Do Loop kombinieren
Von hausmeister079 im Forum .NET DatenverwaltungAntworten: 0Letzter Beitrag: 09.08.10, 11:22 -
Loop
Von lernen.2007 im Forum JavaAntworten: 2Letzter Beitrag: 01.06.06, 13:55 -
VBA Excel: Dynamisch Formeln mit Loop erzeugen
Von mcBain12341 im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 06.05.05, 00:04 -
Excel VBA Loop über Spalten
Von LordDeath im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 14.03.05, 11:03 -
Loop
Von _L_ im Forum Cinema 4DAntworten: 8Letzter Beitrag: 27.01.05, 19:31





Zitieren


Login





