27. august 2007 - 19:58Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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
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
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.
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
Det ser ud til at fungere OK. Hav en god weekend. Smid et svar og der er point.
Synes godt om
Ny brugerNybegynder
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.