Avatar billede Kim Neesgaard Seniormester
22. maj 2003 - 21:52 Der 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?!
Avatar billede sjh Nybegynder
22. maj 2003 - 23:21 #1
det kan være hvis du køre en process som ikke er bliver færtig, når du køre din Msgbox

køre du noget før din Msgbox??
Avatar billede bennytordrup Nybegynder
23. maj 2003 - 09:01 #2
Hvordan ser din kode ud omkring den MsgBox?
Avatar billede Kim Neesgaard Seniormester
23. maj 2003 - 11:10 #3
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).
Avatar billede bennytordrup Nybegynder
23. maj 2003 - 11:11 #4
Dump hele den function, den optræder i.
Avatar billede Kim Neesgaard Seniormester
24. maj 2003 - 14:01 #5
Her er sammenhængen:

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?
Avatar billede johs_j Novice
24. maj 2003 - 15:28 #6
If Len(Trim(tmpBesked)) > 0 Then
  BeregnStatus.Hide
  MsgBox tmpBesked
  Exit Sub
End If
Prøv at flytte MsgBox over BeregnStatus
Avatar billede Kim Neesgaard Seniormester
24. maj 2003 - 15:52 #7
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.
Avatar billede Kim Neesgaard Seniormester
25. maj 2003 - 13:12 #8
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
Avatar billede bennytordrup Nybegynder
25. maj 2003 - 23:40 #9
Umiddelbart kan jeg ikke se noget forkert i koden.

En lappeløsning kan være at sætte linien On Error Resume Next ind i den sub, der giver problemer.
Avatar billede Kim Neesgaard Seniormester
26. maj 2003 - 12:31 #10
Jeg har prøvet at geninstallere VB og her fortæller den, at mswinsck.ocx ikke kan åbnes - kan det have noget som helt med det at gøre?
Avatar billede Kim Neesgaard Seniormester
26. maj 2003 - 21:23 #11
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?
Avatar billede bennytordrup Nybegynder
27. maj 2003 - 08:36 #12
Hivs lsbHovedmenu skal have fokus, når formen er sat ind, så sæt tabindex til 0.

SetFocus kræver, at kontrollen er synlig, og det er ikke altid tilfældet i form_activate.
Avatar billede tjacob Juniormester
27. maj 2003 - 13:28 #13
indsæt en Form.Show lige før du sætter fokus på et kontrolelement (så sent som muligt)
Avatar billede Kim Neesgaard Seniormester
27. maj 2003 - 17:18 #14
Form.Show brokker den sig over, men TabIndex = 0 i propertiesboksen løser problemet! Mange tak!!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester