Avatar billede rotroc Nybegynder
27. august 2007 - 19:58 Der er 12 kommentarer og
1 løsning

ComboBox properties - variabel ListFillRange og LinkedCell

Problem 1.
Jeg har på Ark1 en ComboBox hvor ListFillRange skal kunne hentes fra to forskellige Ranges
hvilket bestemmes af brugerens valg på to OptionButtons kaldet hhv OptHeat og OptCool. Feks hvis brugeren vælger OptHeat skal ListFillRange for ComboBox være en Range navngivet Heat. Hvis OptHeat ikke vælges, underforstået brugeren vælger OptCool skal ListFillRange for ComboBox være en Range navngivet Cool. Hvordan klarer jeg denne ? Kan jeg i Properties for ComboBox indskrive en formel eller er det nemmere at programmere via VBA?

Problem 2
På Ark2 har jeg angivet de to forskellige Ranges som skal kunne vises i ComboBox’en. Jeg vil gerne om VBA koden selv definere længden af Rangen dvs. den skal søge længden af kolonnen indtil den møder den første tomme celle. Dette gør applikationen mere fleksibel såfremt flere items skal tilføjes Range i fremtiden.
Dette kan også gøres i VBA men hvordan er det nu lige...?


Problem 3
På Ark 2 har jeg oven over de to Ranges lavet en opslagsfunktion vha INDEKS formlen således at jeg kan bruge forskellige data som knytter sig til det i ComboBoxen valgte item. Nu er problemet at hvis man til ComboBoxen har en specifik valgt ListFillRange er der også knyttet en specifik LinkedCell. Altså vil jeg gerne at når ListFillRange skifter mellem Rangen Heat og Cool ændre dette også placeringen af LinkedCell, ellers fungere min manuel indtastede INDEKS formel vist ikke.

Er der mon nogle som kan hjælpe ?
Avatar billede excelent Ekspert
27. august 2007 - 21:42 #1
Er det en combobox via formular eller kontrolelement ?
Avatar billede kabbak Professor
27. august 2007 - 21:48 #2
her er koden for de 2 option bottens, jeg arbejder videre på at styre størrelsen på området.

Private Sub OptCool_Click()
    If OptCool Then
        Me.ComboBox1.ListFillRange = "Cool"
        Me.ComboBox1.LinkedCell = "A1"
    End If
End Sub

Private Sub OptHeath_Click()
    If OptHeath Then
        Me.ComboBox1.ListFillRange = "Heat"
        Me.ComboBox1.LinkedCell = "A2"
    End If
End Sub
Avatar billede kabbak Professor
27. august 2007 - 22:05 #3
du burde kunne nøjes med denne kode

Private Sub ComboBox1_GotFocus()
If OptCool Then
CoolNavn
        Me.ComboBox1.ListFillRange = "Cool"
        Me.ComboBox1.LinkedCell = "A1"
        Else
        HeatNavn
        Me.ComboBox1.ListFillRange = "Heat"
        Me.ComboBox1.LinkedCell = "A2"
    End If

End Sub


Public Sub CoolNavn()
ActiveWorkbook.Names.Add Name:="Cool", RefersTo:="=Ark1!" & Range(Range("C2"), Range("C65536").End(xlUp)).Address
End Sub
Public Sub HeatNavn()
ActiveWorkbook.Names.Add Name:="Heat", RefersTo:="=Ark1!" & Range(Range("D2"), Range("D65536").End(xlUp)).Address
End Sub
Avatar billede kabbak Professor
27. august 2007 - 22:09 #4
koden skal være i modulet på det ark du kar din combo og optionbutten i
Avatar billede kabbak Professor
27. august 2007 - 22:09 #5
kar = har
Avatar billede rotroc Nybegynder
29. august 2007 - 19:51 #6
kabak

Den er næsten i vinkel - men det er galt med angivelsen af de to Ranges. På Ark2 har jeg en Range kaldet Cool med første item i Celle B2.(B2:B8) Den anden Range har første item i Celle F2. (F2:F13) Alt efter valg på Option button er det kun første item i hver Range som vises i ComboBox'en og altså ikke hele Rangen.
Et andet ønske: Jeg vil for overskuelighedens skyld placere mine Ranges under hinanden og ikke ved siden af hinanden. Vil det give nogle problemer selvom Ranges er adskildt fra hinanden med tomme celler ? Jeg tænker her på funktionen med End.(xlUp)! Nederst finder du koden.

Private Sub ComboBox1_GotFocus()
If OptCool Then
CoolNavn
        Me.ComboBox1.ListFillRange = "Cool" ' Ok har navngivet Range som Cool
        Me.ComboBox1.LinkedCell = "A1"  '  ' SAND/FALSK , yes det virker også
        Else
        HeatNavn
        Me.ComboBox1.ListFillRange = "Heat" ' Ok
        Me.ComboBox1.LinkedCell = "E1"  ' Ok
    End If

End Sub


Public Sub CoolNavn()
ActiveWorkbook.Names.Add Name:="Cool", RefersTo:="=Ark2!" & Range(Range("B2"), Range("B65536").End(xlUp)).Address
End Sub
Public Sub HeatNavn()
ActiveWorkbook.Names.Add Name:="Heat", RefersTo:="=Ark2!" & Range(Range("F2"), Range("F65536").End(xlUp)).Address
End Sub
Avatar billede kabbak Professor
29. august 2007 - 20:13 #7
Public Sub CoolNavn()
ActiveWorkbook.Names.Add Name:="Cool", RefersTo:="=Ark2!" _
& Range(Worksheets("Ark2").Range("B2"), Worksheets("Ark2").Range("B65536").End(xlUp)).Address
End Sub
Public Sub HeatNavn()
ActiveWorkbook.Names.Add Name:="Heat", RefersTo:="=Ark2!" _
& Range(Worksheets("Ark2").Range("F2"), Worksheets("Ark2").Range("F65536").End(xlUp)).Address
End Sub

det med 2 under hinande, kan man sagtens.

Den der er øverst, der skal
Range("F65536").End(xlUp)).Address
starte lige over den anden

f.eks.
Range("F100").End(xlUp)).Address

og starten skal ligeledes ændres

Range("F2")

til  f.eks.
Range("F50")
Avatar billede kabbak Professor
29. august 2007 - 20:14 #8
og starten skal ligeledes ændres, på den nederste,(skulle det være)

Range("B2")

til  f.eks.
Range("B50")
Avatar billede rotroc Nybegynder
30. august 2007 - 10:54 #9
Mystisk.. hvis der vælges Cool på OptButton bliver celler B1:B2 på  navngivet Cool. Vælges Heat på OptButton bliver celler F1:F2  navngivet Heat. Det virker som om at End(xl) funktionen tæller op og ikke nedaf. I CMDBox vises kun et item nemlig øverste fra hver Range.
Avatar billede kabbak Professor
30. august 2007 - 12:05 #10
Worksheets("Ark2").Range("F65536").End(xlUp)).Address
den finder den sidste række med data i, altså den tæller opad fra 65536, indtil den møder data
Avatar billede kabbak Professor
30. august 2007 - 16:12 #11
Prøv at sende projektmappen til mig, så kikker jeg på det.

kabbak snabela tiscali dot dk
Avatar billede kabbak Professor
30. august 2007 - 21:44 #12
sådan skal makroerne, til de navngivne områder se ud:

Public Sub CoolNavn()
ActiveWorkbook.Names.Add Name:="Cool", RefersTo:="=Ark2!" _
& Worksheets("Ark2").Range("B4").Address & ":" & Worksheets("Ark2").Range("B18").End(xlUp).Address
End Sub

Public Sub HeatNavn()
ActiveWorkbook.Names.Add Name:="Heat", RefersTo:="=Ark2!" _
& Worksheets("Ark2").Range("B20").Address & ":" & Worksheets("Ark2").Range("B65536").End(xlUp).Address
End Sub
Avatar billede rotroc Nybegynder
31. august 2007 - 20:00 #13
Det ser ud til at fungere OK. Hav en god weekend. Smid et svar og der er point.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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