Jag har ett problem som jag inte har märkt innan... Hej Lite extra kommentarer: Kan man inte bara...? En bra tumregel är att alltid deklarera variablerna med minsta möjliga scope!! Behöver man inte en global variabel skall man heller inte göra en sådan. >Kan man inte bara...?Dim XXX as XXX
om jag dimmar något i en SUB så kan jag inte hämta ut det i en annan, vad gör jag för fel?
tex såhär:
<code>
Private Sub hej()
Dim test AS String
test = "Värde1"
End Sub
Private Sub hejigen()
skrivut.caption = test
End Sub
</code>
Variablen test får inget värde i den andra subben, kan man inte dimma den så att den finns kvar i alla subbar?Sv: Dim XXX as XXX
Elementärt kära Jompa.
Dim i en Sub är Lokal. Dvs det är bara den Suben som vet
att den finns.Vidare dör variabeln så fort programslingan når End Sub.
Om du vill göra så att de andra Subrutinerna i din Form skall
kunna nås så får du göra Variabeln Global.
Du måste alltså lägga Dim xxx As xxx i Formens General (först i Formen)
Vill du att variabeln skall nå flera Formar måste du göra den Global
i en BasModuls General. Då skriver man Public xxx As xxx
mvh
SvenSv: Dim XXX as XXX
Att använda för många "globala" variabler i stora VB-projekt brukar ofta ställa till problem, samt att de snor åt sig RAM-minne (mindre problem med dagens datorer) under hela tiden som de "lever". OM du baar behöver komma åt en viss variabel i vissa specifika procedurer är det därför bättre att skicka akruellt variabel-värde som IN-data till den proceduren. T ex:
<code>
Private Sub hej()
Dim test AS String
test = "Värde1"
Call hejigen(test)
End Sub
Private Sub hejigen(indata As String)
skrivut.caption = indata
End Sub
</code>
I ovanstående exempel anropas proceduren hejigen från hej. Vill du istället göra tvärtom så måste hej returnera det värde som du vill skriva ut. Antingen via en "ByRef"-variabel eller som ett returvärde. Ex:
<code>
Private Function hej() As String
Dim test AS String
test = "Värde1"
hej = test 'Här sätter jag returvärdet
End Function
Private Sub hejigen()
Dim test As String
test = hej
skrivut.caption = test
End Sub
</code>
I detta fall finns det två olika variabler som heter "test", en i varje procedur, de är helt separata och "råkar" bara ha samma namn!
Det finns mer detaljer runt variabler och deras "scope" dvs livslängd och räckvidd beroende på vart man deklarerar dem och om man använder Dim, Public, Private, Static eller Friend... men det är en annan historia! :-)
Mvh QezlotSv: Dim XXX as XXX
Public Sub hej()
Dim test AS String
test = "Värde1"
End Sub
Public Sub hejigen()
skrivut.caption = test
End SubSv: Dim XXX as XXX
//TordSv: Dim XXX as XXX
>Public Sub hej()
>Dim test AS String
>test = "Värde1"
>End Sub
>Public Sub hejigen()
>skrivut.caption = test
>End Sub
Nej, du kanske borde testa själv först? ;)
/Johan