Avatar billede tama Nybegynder
30. november 2004 - 12:51 Der er 6 kommentarer og
1 løsning

problemer med byRef

Er der nogle der kan forklare hvorfor nedenstående VBA kode ikke virker som den skal!

Selvom variablen bliver sendt afsted som reference bliver den ikke ændret. Jeg finder det maget mystisk!!!!

Sub setup()
Dim i As Integer
Dim k As Integer
k = 1
For i = 1 To 3
    plusk (k)
Next
End Sub


Sub plusk(ByRef k)
k = k + 1
End Sub
Avatar billede martin_moth Mester
30. november 2004 - 13:08 #1
Nej

Hvis du skriver

plusk(k) kalder du en funktion, der skal returnere noget. Det gør din sub "plusk" ikke.

Du skal blot skrive

    plusk k 'uden paranteser

Du behøver ikek skrive byref - det er underforstået. Skriv blot:

Sub setup()
Dim i As Integer
Dim k As Integer
k = 1
For i = 1 To 3
    plusk k
Next
End Sub


Sub plusk(k)
k = k + 1
End Sub


Kun hvis du vil bruge ByVal skal du specifikt skrive det
Avatar billede tama Nybegynder
30. november 2004 - 13:11 #2
Troede at man gerne måtte skrive paranteser hvis man ville også selvom man ikke vil have en returparameter
Avatar billede tama Nybegynder
30. november 2004 - 13:13 #3
Men det virker det du siger
Avatar billede martin_moth Mester
30. november 2004 - 13:14 #4
Der er også stor forskel på:

Msgbox "Hej", vbokonly
Og
Svar = Msgbox("Hej", vbyesno)
Avatar billede martin_moth Mester
30. november 2004 - 13:15 #5
En funktion har ALTID paranteser, og returnerer noget.
En sub, der ikek returnerer noget, har ALDRIG paranteser.

Mvh. Martin
Avatar billede tama Nybegynder
30. november 2004 - 14:13 #6
Jeg kan ikke helt se sammenligningen. Jeg har jo variabel som jeg sætter lig med metodekaldet!! Men jeg har kan godt se at man skal være opmærksom på brug af paranteser
Avatar billede martin_moth Mester
30. november 2004 - 14:40 #7
Kan du ikke se sammenligningen?

En function, der returnere noget, skal have paranteser
En sub, der ikek returnere noget, skal ikek have paranteser

Så enkelt er det :o)





Eksempel:



Function:

Private function Plusk(k) as integer
  Plusk = k+2
End function
Resultat = Plusk(3) 'MED paranteser





Sub:

Sub plusk(k)
  k = k + 2
End Sub
k=3
plusk k 'UDEN parantes
Resultat = k
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