Hej! Hej <code> <code> varför deklarerar du ByVal. Jag trodde du var en optimeringssnubbe A.Hillqvist. PRova att ta bort byval. Kommer du inte kunna skriva på samma sät. Genom att skriva ByVal kan jag skicka strängar som argument. VB konverterar värdena automatiskt. kolla på dessa rader. Jag ska skriva in olika värde i t1,t2 och t3 sedan ett värde i text4.text om samma värde finns i någon av t1,t2 och t3 så ska ett meddelande om att talet finns med komma upp. Private Sub Command1_Click()Anropa funktion
Jag håller på att lära mej Visual Basic.
Programmet består av ett formulär med fyra textrutor, en knapp och två etiketter. Det går ut på att man skriver in tal i tre av textrutorna och när man fyller i den fjärde så ska funktionen kolla om talet i den fjärde rutan var med i någon av de andra tre.
Funktionen ser ut så här:
Public Function sök3(t1 As Integer, t2 As Integer, t3 As Integer, sökt As Integer) As Boolean
If sökt = t1 Then
sök3 = True
Exit Function
ElseIf sökt = t2 Then
sök3 = True
Exit Function
ElseIf sökt = t3 Then
sök3 = True
Exit Function
Else
sök3 = False
End If
End Function
End Function
Problemet kommer när jag ska anropa funktionen:
Har provat på flera sätt b la med:
Private Sub Command1_Click()
Dim t1 As Integer
Dim t2 As Integer
Dim t3 As Integer
Dim sökta As Integer
t1 = Text1.Text
t2 = Text2.Text
t3 = Text3.Text
sökta = sök3(t1,t2,t3) Här kommer felmeddelandet: Argument not optional
Kod att utföra
End Sub
Är det någon som vet hur jag ska anropa funktionen?
Ska även skapa en funktion son retunerar största värdet, vore jätte taksam för hjälp.
mvh MartinSv: Anropa funktion
Ett fel till du har deklarerat sökta som Integer men
Funktionen lämnar Boolean.Kanske funkar men bör vara samma.
mvh
SvenSv: Anropa funktion
Om du vill anropa din funktion på det sättet som du gör, får metod-
huvudet se ut så här istället:
Public Function sök3(t1 As Integer, t2 As Integer, t3 As Integer) As Boolean
/emma
</code>Sv: Anropa funktion
Public Function sök3(ByVal t1 As Long, ByVal t2 As Long, ByVal t3 As Long, ByVal sökt As Long) As Boolean
If sökt = t1 Then
sök3 = True
ElseIf sökt = t2 Then
sök3 = True
ElseIf sökt = t3 Then
sök3 = True
End If
End Function
Private Sub Command1_Click()
If sök3(Text1.Text, Text2.Text, Text3.Text, Text4.Text) Then
'Kod att utföra
Else
Msgbox "Värdet finns ej i textruterna"
End If
End Sub
</code>Sv: Anropa funktion
Genom att använda byVal måste datorn kopiera värdet du skickar som inparameter. Detta tar tid.
OK för att man måste vara försiktig så man inte råkar ändra externa variabler i lokala funktioner.
Men vad gör man inte för att optimera mera ???
/[peter.h]Sv: Anropa funktion
Sv: Anropa funktion
Tack för hjälpen!
Men jag har fortfarande ett problem, när jag matar in ett tal ett tal i text4, blir alltid värdet falskt även om talet finns med i någon av de textrutor som finns med i funktionen.
Private Sub Command1_Click()
Dim t1 As Integer
Dim t2 As Integer
Dim t3 As Integer
Dim t4 As Integer
Dim sökta As Boolean
t1 = Text1.Text
t2 = Text2.Text
t3 = Text3.Text
t4 = Text4.Text
Text4.Text = t4
If t4 = sök3(t1, t2, t3) Then
MsgBox "Talet finns", , "TEST"
Else
MsgBox "Talet finns INTE", , "TEST"
End If
End Sub
Public Function sök3(t1 As Integer, t2 As Integer, t3) As Boolean
Dim sökt As Boolean
If sökt = t1 Then
sök3 = True
Exit Function
ElseIf sökt = t2 Then
sök3 = True
Exit Function
ElseIf sökt = t3 Then
sök3 = True
Exit Function
Else
sök3 = False
End If
sökt = sök3
End Function
mvh MartinSv: Anropa funktion
Text4.Text = t4
If t4 = sök3(t1, t2, t3) Then
Om du matar in t.ex 3 i text4 blit t4=3
säg att din funktion nu returnerar true (ett sökt värde fanns)
då kollar du om 3=True och 3 är inte lika med True för 3=3 och därför returneras false (3=True)=False och (3=3)=True
If t4 = sök3(t1, t2, t3) Then
borde alltså bytas mot If sök3(t1, t2, t3) then
Vad vill du att t4 skall göra? Och text4?
/JohanSv: Anropa funktion
Om talet som jag skriver in i text4.text inte finns i någon av textrutorna t1,t2 och t3 vill jag ha ett meddelande om att talet inte finns.
/MartinSv: Anropa funktion
Dim t1 As Integer
Dim t2 As Integer
Dim t3 As Integer
Dim t4 As Integer
t1 = Text1.Text
t2 = Text2.Text
t3 = Text3.Text
t4 = Text4.Text
If sök3(t1, t2, t3, t4) Then
MsgBox "Talet " & t4 & " finns", , "TEST"
Else
MsgBox "Talet " & t4 & " finns INTE", , "TEST"
End If
End Sub
Public Function sök3(t1 As Integer, t2 As Integer, t3 as integer, sökt as integer) As boolean
If sökt = t1 Then
sök3 = True
Exit Function
ElseIf sökt = t2 Then
sök3 = True
Exit Function
ElseIf sökt = t3 Then
sök3 = True
Exit Function
Else
sök3 = False
End If
End Function
så här eller?
/Johan