22. maj 2003 - 21:52Der er
13 kommentarer og 1 løsning
Run-time error 5
Når jeg eksekverer en VB applikation i selve VB miljøet kører programmet fint, men når jeg laver en .exe-fil og kører den, får jeg fejlen 'Run-time error 5 Invalid procedure call or argument' (og det gælder også hvis jeg installerer den rigtigt med Packaging Wizard). Jeg har indsat breakpopints for at se, hvor det går galt og det er sørme ved en simpel MsgBox "x"!! Hvis jeg kommenterer MsgBox´en ud, forsvinder fejlmeldingen.
Jeg har søgt på google efter denne fejl og den er nævnt som en bug i tidligere VB versioner, men der står ikke rigtigt, hvad man skal stille op med den - har I et forslag? Det kan vel ikke passe, at man ikke kan bruge en MsgBox?!
Den står i forbindelse med en Exit Function fra et kaldt modul i Form_Activate. Jeg har det på min maskine hjemme, så jeg sender den fulde kode lørdag (er ikke er hjemme i aften).
En menuform kalder Aktuelform, hvor der ingenting laves i Form_Load, men der foretages et tjek i Form_Activate med det formål at kunne lukke formen med det samme i visse tilfælde
Private Sub Form_Activate()
Dim tmpBesked As String
'Skal stå i Form_Activate, da form evt. skal lukkes igen tmpBesked = StatUddrag If Len(Trim(tmpBesked)) > 0 Then BeregnStatus.Hide MsgBox tmpBesked Exit Sub End If
StatUddrag er en funktion i et modul og den returnerer i dette tilfælde en fejlbesked - 'Conn' er en global forbindelse i programmet:
Function StatUddrag() As String
Dim rsGrunddata As New ADODB.Recordset rsGrunddata.Open "tblGrunddata", Conn, adOpenKeyset, adLockOptimistic
Dim tmpAutointerval As Integer tmpAutointerval = Val(VisIndstilling("Autointerval")) 'Returneret string konverteres til integer
Conn.Execute "UPDATE tblGrunddata SET tblGrunddata.Automærke = NULL"
'Evt. fejlbesked If rsGrunddata.BOF = True And rsGrunddata.EOF = True Then StatUddrag = "Fejlbesked" rsGrunddata.Close Exit Function End If
Ovennævnte kode kører fint inde i VB miljøet, men giver run-time fejl når kørt som en .exe fil udenfor VB miljøet. Hvis jeg udkommenterer MsgBox tmpBesked kører koden i begge tilfælde - hvorfor mon?
Hvis jeg gør det, sker der det uheldige, at både AktuelForm OG MsgBox vises, og det ser rigtig kikset ud, når jeg netop ikke vil vise AktuelForm - jeg synes egentlig, at det er mærkeligt, at den virker sådan.
Kan det have noget at gøre med mine referencer - pt. har jeg følgende:
Visual Basic for Applications Visual Basic runtime objects and procedures Visual Basic objects and procudures Microsoft Active X Data Objects 2.7 Library
Ha! Det var slet ikke MsgBox, VB ikke kunne lide. I menuformen er der en listbox, som man kan vælge undermenu fra og her har jeg en Form_Ativate:
Sub Form_Activate() lsbHovedmenu.ListIndex = 0 lsbHovedmenu.SetFocus End Sub
Det er åbenbart Form_Ativate og .SetFocus, der ikke går sammen, men den skal jo være der, så man kan bruge piltasterne i listboxen.
Jeg har nu flyttet .SetFocus til den kaldte form lige inden Exit Sub:
Hovedmenu!lsbHovedmenu.SetFocus
og det virker, men jeg mangler en lsbHovedmenu.SetFocus ved programopstart og den bryder sig heller ikke om at være sammen med Form_Load - hvor kan man ellers forestille sig, den kan være?
Form.Show brokker den sig over, men TabIndex = 0 i propertiesboksen løser problemet! Mange tak!!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.