2009-03-09 9 views
0

Dieser Code funktioniert gut in der IDE aber stürzt jedes Mal auf der letzten Zeile ab, wenn es in eine Exe gemacht und auf dem gleichen Rechner ausgeführt wird. Irgendeine Idee warum?Code funktioniert in der IDE abstürzt in der EXE mit Fehler 91 "Objektvariable nicht gesetzt"

PageFinished = False 
Cancelling = False 
OKToUnload = False 

WebBrowser.Navigate ("https://www.example.com/index.jsp") 

Do While PageFinished = False 'set to true in document complete event 
    DoEvents 
    If Cancelling = True Then 
     OKToUnload = True 
     GoTo Endline 
    End If 
Loop 
PageFinished = False 
WebBrowser.Document.All("UserId").Value = txtNumber.Text 'error here 
+0

Beispiel.com wird für solche Sachen verwendet, ich habe es für Sie hinzugefügt. –

+0

Olafur Ich verstehe nicht, was du sagst – kjack

+0

OK verstehe jetzt, danke – kjack

Antwort

1

Sie müssen msgboxes hinzufügen, die das Testergebnis zeigen, welche Variable auf NOTHING gesetzt ist oder in eine Textdatei schreiben und die exe ausführen und sehen, was auf nichts gesetzt ist.

Es kann so einfach sein wie warten vor der letzten Zeile. Ein Wait-Unterprogramm sieht so aus.

Public Sub Wait(T As Double) 
    Dim StartTime As Double 
    StartTime = Timer 
    Do While Abs(Timer - StartTime) < T 
    Loop 
End Sub 

Ich würde versuchen, 1/10 Sekunde und arbeiten Sie sich nach oben. Warten Sie 1 Wenn Sie eine Sekunde oder länger warten müssen, sollten Sie DoEvents regelmäßig aufrufen, damit Ihre Anwendung nicht reagiert.

Der Grund dafür ist, dass die IDE immer PCODE verwendet, so ist eine Berührung langsamer als eine EXE EXE erfüllt. Sie können auch versuchen, zu PCODE zu kompilieren, um zu sehen, ob das einen Unterschied macht.

+0

Hallo RS Ihr Vorschlag funktioniert, aber nicht konsequent, aber das war meine Schuld. Ich habe es vermasselt. Ich hatte meine pagefinished-Variable im Download-Complete-Event des Webbrowsers auf "true" gesetzt, anstatt auf den vollständigen Dokument-Compiler. Es tut uns leid! – kjack

1

Ohne mehr Ihres Beispielcode zu sehen, würde ich raten wagen, dass dies ein Timing-Problem ist die „versteckte“ von dem VB-IDE ist. Testen Sie WebBrowser.Document.All ("UserId"), bevor Sie die Eigenschaft .Value festlegen. Es ist wahrscheinlich nicht verfügbar (Nothing) zu dem Zeitpunkt, zu dem die Nicht-IDE-Version des Codes an diesen Punkt gelangt.

"Objektvariable oder mit Blockvariable nicht gesetzt" ist die VB-Art, Ihnen über eine Nullreferenz zu sagen, und in der Zeile WebBrowser.Document.All ("UserId") haben Sie 3 separate Objekte, die null sein könnten.

+0

Es war ein Timing-Problem, wie du sagst, verursacht durch meine dumme Reaktion auf das Downloadcomplete statt das Documentcomplete Ereignis des Webbrowsers. Entschuldigung für die falschen Informationen. – kjack

Verwandte Themen