Hejsan, jag satt och testade lite och upptäckte att om jag skriver så här: Låt oss ta grunderna i visualbasic. En subrutina och funktion anropas endast med paranteser om det kallas på med call. Även när funktioners returvärde hämtas:Variabler
<code>
Private Sub Command1_Click()
Dim tal As Integer
tal = 10
minsub tal
Debug.Print tal
End Sub
Sub minsub(nr As Integer)
nr = 70
End Sub
</code>
Så skrivs det ut 70 som det borde göra enligt vad jag har lärt mig men när jag skriver så här:
<code>
Private Sub Command1_Click()
Dim tal As Integer
tal = 10
minsub(tal)
Debug.Print tal
End Sub
Sub minsub(nr As Integer)
nr = 70
End Sub
</code>
Så skrives det ut 10!
Varför blir inte det också 70?
Eller är det så att om man sätter paranteser runt om så skickas variabeln som ByVal eller hur är det?Sv: Variabler
Exempel på när ni inte skall använda Parantes:
<code>
MsgBox "Vill du tabort alla poster", vbYesNo
Connection.Execute "DELETE FROM TabellNamn"
</code>
Exempel när ni skall använda Parantes:
<code>
Call MsgBox("Man kan anropa med Call", vbInformation)
Do
Svar = MsgBox("Är Andreas bäst?",vbYesNo)
Loop Until Svar = vbYes
Select Case MsgBox("Vill du tabort alla poster?",vbYesNo)
Case vbYes
Connection.Execute "DELETE FROM TabellNamn"
End Select
Set rsTemp = Connection.Execute("SELECT * FROM TabellNamn")
</code>
Det du gör är att du tvingar vb att utvärdera vilkoret. Det är därför du bara kan ha ett arbument inom parantesen. Om du skriver:
<code>
MsgBox("Vill du tabort alla poster",vbYesNo)
</code>
Kommer du få ett felmeddelande för om du skall vara kosekvent skall du skriva:
<code>
MsgBox ("Vill du tabort alla poster"),(vbYesNo)
</code>
Alltså paranteserna är inga funktionsparanteser utan programatiska paranteser för att ange i vilken ordning uttrycket skall utvärderas. T.ex:
<code>
Debug.Print ((1+2)*3)-4
</code>