Bigelk Skrevet 4. september 2013 Del Skrevet 4. september 2013 Hei. Jeg prøver å sette en variabel i excel objects og overføre den til en Sub. Public Variabelen As String Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target(1).Column Case 1 cancel = True Variabelen = "HEI" Call Do_It End Select End Sub Sub Do_It() MsgBox Variabelen End Sub Men Variabelen "blir ikke med over" Noen som vet hvordan det kan løses? MVH Torbjørn Lenke til kommentar
Harald Staff Skrevet 4. september 2013 Del Skrevet 4. september 2013 (endret) Hei Torbjørn Det første du skal gjøre er å huke av "Require variable declaration" i VB-editorens options-meny. Prisen er at du må deklarere alle variabler (det står Option Explicit øverst i alle nye moduler), gevinsten er mye mer informative feilmeldinger. Koden din virker etter at jeg fjernet Cancel = True (som ikke er deklarert) og satte inn Case Else for å ta høyde for kolonnene B og bortover. Variabler som deklareres utenfor Sub'er og Functions er tilgjengelige i hele modulen. MEN dette er ikke den kule måten å gjøre ting. Variabler inn i en Sub eller Function skrives inne i parentesen, slik: Sub Test() Call TellHim("Relax") End Sub Sub TellHim(SayWhat As String) MsgBox SayWhat End Sub ..det er bare å øke på med variabler skilt med komma, pass bare på at de er av riktig datatype: Sub Test() Call TellHim("Relax", 5) End Sub Sub TellHim(SayWhat As String, ManyTimes As Long) Dim i As Long For i = 1 To ManyTimes MsgBox SayWhat, , "For " & i & ". gang:" Next End Sub HTH. Beste hilsen Harald (som ikke fikk Code-taggingen til å virke i dag, sorry) Endret 4. september 2013 av Harald Staff Lenke til kommentar
Bigelk Skrevet 5. september 2013 Forfatter Del Skrevet 5. september 2013 Hei. Tusen takk for hjelpen Harald! Jeg er på det kunnskapsnivået at jeg synes det er kult så lenge det fungerer Den ferdige koden endte opp så her Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Byte For i = 1 To 8 Select Case Target(1).Column Case i Call Do_It(i) End Select Next i End Sub Option Explicit Public LR As String Sub Do_It(i As Byte) Select Case i Case 1 LR = Cells(Rows.Count, "H").End(xlUp).Row Cells(LR + 1, i + 2).Select Case 8 LR = Cells(Rows.Count, "A").End(xlUp).Row Cells(LR + 1, i - 7).Select Case Else LR = Cells(Rows.Count, "H").End(xlUp).Row Cells(LR + 1, i + 1).Select End Select End Sub Mvh Torbjørn Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå