Avatar billede JAHT Nybegynder
17. juli 2011 - 15:58 Der 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.

På forhånd tak.

/Jacob
Avatar billede Ialocin Novice
17. juli 2011 - 23:56 #1
Hej igen Jacob :o)

De blanke celler kan vi sagtens klare os uden om.

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)
   
            End If
   
    'næste celle
    Next

 

    'vis userformen
    UserForm3.Show
   
End Sub



Med venlig hilsen, Nicolai
Avatar billede supertekst Ekspert
18. juli 2011 - 08:55 #2
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
   
Rem flyt tilbage i liste
    cc.Clear
   
    For ix = 1 To antal
        cc.AddItem vektor(ix)
    Next ix
   
    Set cc = Nothing
End Sub
Avatar billede JAHT Nybegynder
18. juli 2011 - 09:48 #3
Hej til jer begge,

Ingen af koderne kan jeg få til at virke. Når jeg har sat dem ind og når jeg klikke på ComboBox'en, kommer der ikke noget frem.

Ved ikke om der er noget i Properties, som skal aktiveres?

Til Ialocin: Overskrifterne står både med fed og kusiv.

Hilsen Jacob
Avatar billede Ialocin Novice
18. juli 2011 - 09:54 #4
Hej Supertekst

Jeg kigger lige med :o)

Din kode virker perfekt ... dog kommer diverse overskrifter, som befinder sig i celler mellem områderne, med i comboboxens liste ??

Kan man komme udover det ??

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
18. juli 2011 - 09:57 #5
Hej Jacob

Umiddelbart skal der ikke pilles i comboboxens properties ...

Hvordan med diverse navne:
Combobox = ComboBox1 ?
Userform = UserForm3 ?
Ark = Oversigt ?


Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
18. juli 2011 - 09:58 #6
Hej Jacob

Og ligger dine værdier i kolonne D  ??

Med venlig hilsen, Nicolai
Avatar billede JAHT Nybegynder
18. juli 2011 - 10:22 #7
Hej Nikolai,

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)
   
            End If
   
    'næste celle
    Next

 

    'vis userformen
    UserForm3.Show
   
End Sub

Hilsen Jacob
Avatar billede Ialocin Novice
18. juli 2011 - 10:29 #8
Hej Jacob

Det ser ud til, at du vil fylde din combobox, når du klikker på den ?

Din kode:  Private Sub NameCB_Click()

Det tror jeg ikke vil virke ???

Prøv i stedet, at kalde din kode fra den knap (som i mit eksempel) eller den hændelse der åbne din userform med comboboxen.


Med venlig hilsen, Nicolai
Avatar billede supertekst Ekspert
18. juli 2011 - 10:47 #9
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
   
Rem flyt tilbage i liste
    cc.Clear
   
    For ix = 1 To antal
        cc.AddItem vektor(ix)
    Next ix
   
    Set cc = Nothing
End Sub
Avatar billede JAHT Nybegynder
18. juli 2011 - 10:48 #10
Jeg har indsat nedenstående Kode:

Kan dog stadig ikke få det til at fungerer

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 And c.Font.Italic = False Then
           
                'tilføj værdien i cellen til comboboxen
                UserForm3.NameCB.AddItem (c.Value)
   
            End If
   
    'næste celle
    Next

    'vis userformen
    UserForm3.Show
   
End Sub
Avatar billede JAHT Nybegynder
18. juli 2011 - 10:54 #11
Hej Supertekst,

Beklager virkelig meget, men kan stadig ikke få det til at fungerer

Hilsen Jacob
Avatar billede Ialocin Novice
18. juli 2011 - 11:23 #12
Hej Jacob

Hmm ?
Hvad sker der, hvis der sker noget ??




Jeg er nødt til at smutte, men vender tilbage senere i dag :o)


Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
18. juli 2011 - 12:12 #13
Hej Jacob
I #10 skal du ikke ha' følgende linie med:

Private Sub cmdÅbenUserform3_click()

Da det et click hændelsen på min knap.
Kopier i stedet linierne mellem ovenstående linie og End Sub ind i DIN hændelse der åbner din userform ?

Mvh Nicolai
Avatar billede JAHT Nybegynder
18. juli 2011 - 22:38 #14
Er ikke helt med på hvad du mener?? :-)
Avatar billede supertekst Ekspert
18. juli 2011 - 23:00 #15
JAHT

Hvis det kan være en hjælp kan jeg sende min "model" - send evt. en mail - @-adresse under min profil..
Avatar billede supertekst Ekspert
18. juli 2011 - 23:27 #16
Kan ikke sende - problem med "Hotmail" - returneres af systemadmin.
Avatar billede supertekst Ekspert
18. juli 2011 - 23:32 #17
Er der en anden @-adresse - så er du velkommen til at sende denne.
Avatar billede Ialocin Novice
18. juli 2011 - 23:49 #18
Hej Jacob

I #10, #13 og #14

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)
   
            End If
   
    'næste celle
    Next

    'vis userformen
    UserForm3.Show


Med venlig hilsen, Nicolai
Avatar billede JAHT Nybegynder
19. juli 2011 - 10:51 #19
Hej Begge,


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?

Hilsen Jacob
Avatar billede supertekst Ekspert
19. juli 2011 - 11:36 #20
Hej Jacob

Har du mulighed for at sende din fil? Så skal jeg prøve at få det på plads..
Avatar billede Ialocin Novice
19. juli 2011 - 12:50 #21
Hej Jacob

Umiddelbart er jeg helt blank ???

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 ??

Glæder mig til Superteksts dom ;0)

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
19. juli 2011 - 13:00 #22
Hej Igen

Prøv evt. følgende:

Opret en knap på arket oversigt ... Og i dens klik hændelse skriver du:

UserForm3.NameCB.AddItem ("Jacob")
UserForm3.Show


For at se om comboboxen modtager JACOB ??

Med venlig hilsen, Nicolai
Avatar billede JAHT Nybegynder
19. juli 2011 - 15:00 #23
Hej Supertekst,

Det lykkedes at få det til at fungerer 50 % :-)

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.

Hilsen Jacob
Avatar billede supertekst Ekspert
19. juli 2011 - 16:04 #24
Hej Jacob

Så lysner det. Dit ønske er kun rimeligt - skal se på det og vende tilbage...
Avatar billede supertekst Ekspert
19. juli 2011 - 17:20 #25
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
   
    sortering
End Sub
Avatar billede JAHT Nybegynder
19. juli 2011 - 19:39 #26
Hej Supertekst,

Super, så lykkedes det omsider :-)

Har lige et tillægsspørgsmål.

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?

Hilsen Jacob
Avatar billede supertekst Ekspert
19. juli 2011 - 20:45 #27
Hej Jacob

Fint det lykkedes..

I princippet kunne det hele foregå fra en combobox - hvis man samtidigt kunne vælge fanenavnet. Var det en idé?

Vender tilbage hertil..
Avatar billede Ialocin Novice
19. juli 2011 - 21:49 #28
Hej Begge

Lige et spørgsmål til Supertekst af ren interesse :o)
I din deklarering i #25:  Dim omRåderne As Variant, ix As Byte, område

Hvad er område og hvad bruges det til ?


Med venlig hilsen, Nicolai
Avatar billede supertekst Ekspert
19. juli 2011 - 23:08 #29
Det er vist en tanke, der ikke er blevet slettet igen...
Avatar billede Ialocin Novice
19. juli 2011 - 23:20 #30
Hej Supertekst

Ha ha ... kender jeg godt :o)

Men det kunne sagtens ha´ været et brugbart trick ?
Tak for info.

Med venlig hilsen, Nicolai
Avatar billede supertekst Ekspert
20. juli 2011 - 14:24 #31
Iflg. aftale
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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