Vad är det för skillnad på att skriva call vid funktionsanrop och att inte skriva det? Med Call: Paranteser runt parametrar Har skapat en klass som innehåller en sub vilken tar en Hej Ex1 I ditt Ex1 skickar du resultatet av utrycket (tal). Du skickar inte en referens till variabeln. Man ska inte omge parametrarna med paranteser om man inte har call eller tilldelar den till en variabel.<br>Call[LÖST]
Sv: Call
<code>
Call Test(1, "2", 3)
</code>
Utan Call: Inga paranteser runt parametrar
<code>
Test 1, "2", 3
</code>
Är nog den största skillnaden. Annars känner jag inte till något.Sv: Call
byref parameter. Det blir inte byref om jag inte skriver:
call klass.sub(tal)
Utelämnar jag call förändras inte tal vid slutförd sub.Sv: Call
Det var intressant.
>Det blir inte byref om jag inte skriver: call klass.sub(tal)
Skriver du verkligen rätt här ? Menar du inte ByVal
ByRef blir det alltid om du inte anger något annat.
Skriver alltid ex. Call Sub(ByVal tal As Long)
och påstår att så skall man skriva i 99 % av alla fall.
Mvh
SvenSv: Call
Dim tal As Integer
tal = 10
MinSub (tal)
Print tal
Private Sub MinSub(tal As Integer)
tal = 50
End Sub
Ex2
Dim tal As Integer
tal = 10
Call MinSub (tal)
Print tal
Private Sub MinSub(tal As Integer)
tal = 50
End Sub
I ex2 skrivs 50 ut, där funkar byref men i ex1 när call utelämnas
fungerar ej byref.
Varför? Vad är skillnaden på call och inte?Sv: Call
<br>
<code>
MinSub (tal)
</code>
Motsvarar exakt:
<code>
Call MinSub((tal))
</code>
<br>
<br>
Detta kan du se om du försöker använda fler än en parameter. Komer du att få syntaxfel i din Ex1.
<code>
Option Explicit
Sub Test1()
Dim tal As Integer
tal = 10
MinSub tal
Debug.Print "Test1: " & tal
tal = 10
MinSub (tal)
Debug.Print "Test2: " & tal
tal = 10
Call MinSub(tal)
Debug.Print "Test3: " & tal
End Sub
Private Sub MinSub(tal As Integer)
tal = 50
End Sub
Sub Test2()
Dim tal1 As Integer
Dim tal2 As Integer
tal1 = 10
tal2 = 10
MinSub2 tal1, tal2
Debug.Print "Test1: " & tal1 & ", "; tal2
tal1 = 10
tal2 = 10
'MinSub2 (tal1, tal2)'Compile error: Expected: =
Debug.Print "Test2: " & tal1 & ", "; tal2
tal1 = 10
tal2 = 10
Call MinSub2(tal1, tal2)
Debug.Print "Test3: " & tal1 & ", "; tal2
End Sub
Private Sub MinSub2(tal1 As Integer, tal2 As Integer)
tal1 = 50
tal2 = 50
End Sub
</code>