17. juli 2011 - 15:58Der er
30 kommentarer og 1 løsning
Hjælp til ComboBox i Userform
Hej..... Jeg har en Userform, hvor brugeren skal kunne registrere forskellige informationer.De informationer som brugeren indtaster overføres bagefter til arket "Køb".
Jeg har lavet en ComboBox, hvor brugeren skal vælge et navn, således så købet bliver registeret det rigtige sted.
Jeg har brug for lidt hjælp til at lave en kode, til min ComboBox. Nedenfor er der lidt grundlæggende information: Navn på Userform: Userform3 Navn på ComboBox: ComboBox1 Navn på ark, hvor værdierne skal hentes: Oversigt Område over de værdier som skal vises i ComboBoxen: - D8:D13, D17:D20, D24:D31, D35:D38
Det skal bemærkes, at de ovenstående områder godt kan udvides, hvorfor listen skal være dynamisk. Årsagen til at der er nogle "huller" mellem områderne er, at der er overskrifter m.v. som ikke skal vises i ComboBox'en.
Endvidere er der i de anførte områder enkelte celler som er blanke. Så det kunne være super, hvis ComboBox'en kun viste de celler som indeholder en værdi. Hvis man samtidig kunne lave en kode der sorteret listen fra A til Z vil der være helt perfekt.
Men hvordan er de der overskrifter + m.v formateret ? Hvis de evt. er formateret som bold (Fed skrift) ??, så klarer nedenstående kode også den.
Og der kan indsættes ekstra rækker = dynamisk. Sortering i alfabetisk rækkefølge .... ikke p.t!
Koden går ud fra, at første værdi på listen findes i celle D8!
Her er koden:
Private Sub cmdÅbenUserform3_Click() Dim i As Integer 'tællevariabel Dim c As Range 'objektvariabel
'fyld comboboxen med værdier fra kolonne D på arket Oversigt 'Start i celle 8 og slut i sidste celle indeholdende en værdi For i = 8 To Sheets("Oversigt").Range("D65536").End(xlUp).Row
'set C = den næste celle i kolonnen Set c = Worksheets("Oversigt").Cells(i, 4)
'hvis cellen er forskellig fra tom og skrifttypen ikke er bold 'på Dansk: hvis der står noget i cellen, som ikke en med skrevet med fed skrift If c.Value <> "" And c.Font.Bold = False Then
'tilføj værdien i cellen til comboboxen UserForm3.ComboBox1.AddItem (c.Value)
Private Sub UserForm_activate() Dim omRåderne As Variant, ix As Byte, område omRåderne = Array("D8:D13", "D17:D20", "D24:D31", "D35:D38")
Me.ComboBox1.Clear
For ix = 0 To UBound(omRåderne) For Each cc In Range(omRåderne(ix)) If cc.Value <> "" Then Me.ComboBox1.AddItem cc End If Next cc Next ix
sortering End Sub Public Sub sortering() Dim antal As Long, cc As Object Dim vektor(), ix As Long, j As Long, byt Set cc = Me.ComboBox1
antal = cc.ListCount
ReDim vektor(antal)
Rem sæt værdier i vektor For ix = 1 To antal vektor(ix) = cc.List(ix - 1) Next ix
Rem udfør sortering For ix = antal - 1 To 1 Step -1 For j = 1 To ix If vektor(j) > vektor(j + 1) Then byt = vektor(j) vektor(j) = vektor(j + 1) vektor(j + 1) = byt End If Next j Next ix
Der var lidt fejl i navne, de er følgende: ComboBox = NameCB Userform = Userform3 Ark = Oversigt Jep, værdierne ligger i kolonne D i arket "Oversigt"
Jeg har indsat nedenstående kode (det som er markeret med fed = forskel ift. din kode):
Private Sub NameCB_Click() Dim i As Integer 'tællevariabel Dim c As Range 'objektvariabel
'fyld comboboxen med værdier fra kolonne D på arket Oversigt 'Start i celle 8 og slut i sidste celle indeholdende en værdi For i = 8 To Sheets("Oversigt").Range("D65536").End(xlUp).Row
'set C = den næste celle i kolonnen Set c = Worksheets("Oversigt").Cells(i, 4)
'hvis cellen er forskellig fra tom og skrifttypen ikke er bold 'på Dansk: hvis der står noget i cellen, som ikke en med skrevet med fed skrift If c.Value <> "" And c.Font.Bold And c.Font.Italic = False Then
'tilføj værdien i cellen til comboboxen UserForm3.NameCB.AddItem (c.Value)
VERSION 2 Private Sub ComboBox1_DropButtonClick() Dim omRåderne As Variant, ix As Byte, område omRåderne = Array("D8:D13", "D17:D20", "D24:D31", "D35:D38")
Me.ComboBox1.Clear
For ix = 0 To UBound(omRåderne) For Each cc In Range(omRåderne(ix)) If cc.Value <> "" Then Me.ComboBox1.AddItem cc End If Next cc Next ix
sortering End Sub Public Sub sortering() Dim antal As Long, cc As Object Dim vektor(), ix As Long, j As Long, byt Set cc = Me.ComboBox1
antal = cc.ListCount
ReDim vektor(antal)
Rem sæt værdier i vektor For ix = 1 To antal vektor(ix) = cc.List(ix - 1) Next ix
Rem udfør sortering For ix = antal - 1 To 1 Step -1 For j = 1 To ix If vektor(j) > vektor(j + 1) Then byt = vektor(j) vektor(j) = vektor(j + 1) vektor(j + 1) = byt End If Next j Next ix
Dim i As Integer 'tællevariabel Dim c As Range 'objektvariabel
'fyld comboboxen med værdier fra kolonne D på arket Oversigt 'Start i celle 8 og slut i sidste celle indeholdende en værdi For i = 8 To Sheets("Oversigt").Range("D65536").End(xlUp).row
'set C = den næste celle i kolonnen Set c = Worksheets("Oversigt").Cells(i, 4)
'hvis cellen er forskellig fra tom og skrifttypen ikke er bold 'på Dansk: hvis der står noget i cellen, som ikke en med skrevet med fed skrift If c.Value <> "" And c.Font.Bold And c.Font.Italic = False Then
'tilføj værdien i cellen til comboboxen UserForm3.NameCB.AddItem (c.Value)
Kopier følgende ind i den hændelse der åbner din UserForm ... og tjek lige, at sheet navn, kolonne, userform navn og combobox navn passer til koden ?
Dim i As Integer 'tællevariabel Dim c As Range 'objektvariabel
'fyld comboboxen med værdier fra kolonne D på arket Oversigt 'Start i celle 8 og slut i sidste celle indeholdende en værdi For i = 8 To Sheets("Oversigt").Range("D65536").End(xlUp).row
'set C = den næste celle i kolonnen Set c = Worksheets("Oversigt").Cells(i, 4)
'hvis cellen er forskellig fra tom og skrifttypen ikke er bold 'på Dansk: hvis der står noget i cellen, som ikke en med skrevet med fed skrift If c.Value <> "" And c.Font.Bold And c.Font.Italic = False Then
'tilføj værdien i cellen til comboboxen UserForm3.NameCB.AddItem (c.Value)
Til Nikolai Jeg har indsat ovenstående kode i den knap som åbner Userformen, men der kommer stadig ikke noget frem i ComboBoxen? Skal der ikke indsættes nogen kode i selve ComboBox'en??
Til Supertekst Har prøvet at indsætte din kode i min userform ud fra den måde som du har indsat den, med tilrettelser af div. navne. Der kommer dog ikke noget frem?
Ud fra koden har jeg svært ved at se, hvorfra den ved hvor den skal hente værdierne. I koden referer den til et område, men ikke en fane?
Det min kode gør, er at fylde comboboxen med værdier fra kolonne D på atket oversigt, startende i celle 8. - Herefter åbnes/synliggøres userformen.
Hvis du er sikker på, at alle kode navne stemmer overens med din virkelighed og din combox er en combobox trukket ind på din userform fra toolboxen ? ... Så pas ??
Har dog det problem. Når jeg i ComboBoxen klikke på et navn, så bliver ComboBoxen "tom". Kunne godt tænke mig, at hvis jeg f.eks. valgte navnet Novo Nordisk, så skulle dette blive stående i comboBoxen, dels fordi navnet skal overføres til et andet ark samt at der skal laves en lookup fuktion, således at bærenr. bliver vist.
Rem Version 4 Private Sub userform_Activate() '<===== ERSTAT BESTÅENDE MED DENNE E Dim omRåderne As Variant, ix As Byte, område omRåderne = Array("D8:D13", "D17:D20", "D24:D31", "D35:D38") '<---- kan ajourføres
Me.ComboBox1.Clear
For ix = 0 To UBound(omRåderne) For Each cc In ActiveWorkbook.Sheets("oversigten").Range(omRåderne(ix)) If cc.Value <> "" Then Me.ComboBox1.AddItem cc End If Next cc Next ix
I samme userform, har jeg 3 faner, en der hedder "køb", "Salg" og "Renter". I alle 3 faner skal det være muligt at lave et opslag ved hjælp af en ComboBox - Fuldstændig på samme måde som som den du har hjulpet mig med.
Hvordan gør man dette. Vil gerne oprette en ny opgave, så du kan få point for dette?
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.