Gå til innhold

[Løst] Excel 2007 VBA "overføre variabel fra objects til Sub"


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Harald Staff
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...