tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
2114
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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.
    
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    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.
     

  3. #3
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    Registriert seit
    May 2008
    Ort
    Sydney, Australien
    Beiträge
    87
    danke fuer deinen andenkstoss... Leuchtet mir jetzt auch ein.
     

  4. #4
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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
     

  5. #5
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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...
     

  6. #6
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    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

  7. #7
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    Registriert seit
    May 2008
    Ort
    Sydney, Australien
    Beiträge
    87
    Hallo,

    danke fuer deine schnelle antwort, werde es mal ausprobieren...
     

  8. #8
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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?
     

  9. #9
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    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..
     
    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

  10. #10
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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 Hilfe
    Geändert von hausmeister079 (27.02.11 um 04:37 Uhr)
     

  11. #11
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    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

  12. #12
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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****?
     

  13. #13
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    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

  14. #14
    hausmeister079 hausmeister079 ist offline Mitglied Silber
    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.

    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
    Muss ich vielleicht irgendeine Properties aendern?
     

  15. #15
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    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

  1. Excel Datenbank mit Do Loop kombinieren
    Von hausmeister079 im Forum .NET Datenverwaltung
    Antworten: 0
    Letzter Beitrag: 09.08.10, 11:22
  2. Loop
    Von lernen.2007 im Forum Java
    Antworten: 2
    Letzter Beitrag: 01.06.06, 13:55
  3. VBA Excel: Dynamisch Formeln mit Loop erzeugen
    Von mcBain12341 im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 06.05.05, 00:04
  4. Excel VBA Loop über Spalten
    Von LordDeath im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 14.03.05, 11:03
  5. Loop
    Von _L_ im Forum Cinema 4D
    Antworten: 8
    Letzter Beitrag: 27.01.05, 19:31