Avatar billede vv25 Nybegynder
12. juli 2012 - 12:59 Der er 15 kommentarer og
1 løsning

Kun "sætte" varibler en gang

Hej,

Jeg er igang med at lave et ark hvor jeg i flere moduler og procedure skal bruge de samme variabler med en fast celle reference, mit bud var at bruge nedenstående, men den virker ikke:
Public Const Kontanthjælp As String = Sheets("data").Range("B2")

Jeg kan sagtens få lov at dimensionere en varible der gælder for hele arket, men selve referencen til cellens værdi kan jeg ikke få til at virke.

Jeg vil gerne have et modul der kun indeholde henvisningerne til cellerne, så det så vidt muligt kun er et sted jeg skal ind og redigere.

Håber der er en der kan hjælpe.
Avatar billede supertekst Ekspert
12. juli 2012 - 13:37 #1
Eks.:
Kontanthjælpsbeløbet er defineret i ark Data B2

Funktionen hentKontanthjælp er defineret i Module1:
Public Function hentkontantHjælp()
    hentkontantHjælp = Sheets("data").Range("B2")
End Function

Anvendelse hvor som helst:
Private Sub testIark3()
    kh = Module1.hentkontantHjælp
End Sub

er det noget i denne retning eller?
Avatar billede vv25 Nybegynder
12. juli 2012 - 13:42 #2
Ja det kunne måske godt lade sig gøre, men havde håbet for noget en smule lettere, da jeg vel har i hvert fald 100 der skal defineres på denne måde.
Avatar billede supertekst Ekspert
12. juli 2012 - 14:04 #3
Ok - du går efter en løsning med kun en definition?
Avatar billede vv25 Nybegynder
12. juli 2012 - 14:27 #4
Nej det gør jeg ikke nødvendigvis, men lige nu er alle mine variabler defineret i toppen af et modul, mens selve referencen til cellen skal skrives i hver eneste procedure:
Kontanthjælp = Sheets("Data").Range("B2")

Når jeg så bruger variablen Kontanthjælp i 20 forskellige procedure i 5 forskellige moduler, bliver det til rigtig mange steder den samme defination står.
Avatar billede supertekst Ekspert
12. juli 2012 - 14:42 #5
Du kan anvende fuktionerne som konstanter:
Sub test()
    If kontantHjælp > bidrag Then
        ...
    Else
        ...
    End If
End Sub

...hvor disse hentes fra module1 - det er her ud kan ajf. ref. til data. Skal kun defineres 1 x

Public Function kontantHjælp()
    kontantHjælp = Sheets("data").Range("B2")
End Function
Public Function bidrag()
    bidrag = Sheets("data").Range("B3")
End Function
Avatar billede vv25 Nybegynder
12. juli 2012 - 14:47 #6
Kan jeg så også bruge dem til at hente værdien?

Jeg skal til slut i min kode danne en tekst (journalnotat) ud af mine variabler, f.eks.:

"Borger modtager " & Kontanthjælp & " kr. pr. måned"
Avatar billede supertekst Ekspert
12. juli 2012 - 14:55 #7
Ja da - når du anvender ordet kontantHjælp - så er dette IKKE en variable - men en funktion, der returnere værdien fra arket "Data".

Bemærk at funktionsnavnet netop er kontantHælp og bidrag i eksemplet.
Avatar billede vv25 Nybegynder
12. juli 2012 - 15:01 #8
Okay men kan jeg så bruge den blot ved at skrive funktionen:
"Borger modtager " & KontantHjælp & " kr. pr. måned"
Avatar billede supertekst Ekspert
12. juli 2012 - 15:09 #9
Ja :-) - har tilføjet de 2 sidste tilskrivning og visningen

Sub test()
Dim tekst As String
    If kontantHjælp > bidrag Then
        Stop
    Else
        Stop
    End If
   
    tekst = "Borger modtager " & kontantHjælp & " kr. pr. måned"
    MsgBox tekst

End Sub
Avatar billede vv25 Nybegynder
12. juli 2012 - 15:14 #10
Godt det vil jeg prøve, tak.

Tillægsspørgsmål:
Kan man også definere rækker på den måde, jeg har nemlig et ark hvor en masse række vises eller skjules afhængig af forskellige værdier, så i stedet for at sige:
Activesheets.Rows("22:25").Hidden = True

KontHjælpRække.Hidden = True

Jeg ved at der vil ske ændringer i arkets udseende, så indhold kan nemt skifte række.
Avatar billede supertekst Ekspert
12. juli 2012 - 15:18 #11
Selv tak

Tillæg?: Måske via navngivning - men undersøger det & vender tilbage.
Avatar billede vv25 Nybegynder
12. juli 2012 - 15:22 #12
Fedt tak :)
Avatar billede vv25 Nybegynder
12. juli 2012 - 15:23 #13
Og du poster bare et svar når du vil have dine point.
Avatar billede supertekst Ekspert
12. juli 2012 - 15:56 #14
Ikke noget med navngivning er anvendt - men samme princip som funtionerne - dog hersom Sub.

Anvendelse:
Sub test2()
    kontantHjælpRækkeVisIkke True
   
Rem ...
Rem ...

    kontantHjælpRækkeVisIkke False
   
End Sub

Module1:
Public Sub kontantHjælpRækkeVisIkke(jaNej As Boolean)
    ActiveSheet.Rows("22:25").Hidden = jaNej
End Sub


ok - så får du et svar..
Avatar billede vv25 Nybegynder
13. juli 2012 - 07:21 #15
Tusind tak for hjælpen, glæder mig til at få det prøvet af.
Avatar billede supertekst Ekspert
13. juli 2012 - 09:04 #16
Selv tak og god fornøjelse..
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