Avatar billede JAHT Nybegynder
21. januar 2012 - 21:24 Der er 3 kommentarer og
1 løsning

Opslag i userform - Hjælp til VBA kode

Hej,

Jeg har et Excel ark, hvori der er indarbejdet en userform. I denne userform kan brugeren vælge nogle værdier vha. af en liste.

Arket er bygget op således:
Kolonne B: Bærenr.
Kolonne D: Navn

I userformen kan brugeren vælge de navne som er anført i kolonne D. Jeg kunne godt tænke mig, at det var muligt at få vist den værdi der står i kolonne B, ud for det navn som brugeren har valgt i listen.

Vil høre om det var muligt at lave en VBA kode, som kunne håndtere dette

Kan sende Excel arket, hvis dette er nemmer.

Hilsen
JAHT
Avatar billede Ialocin Novice
21. januar 2012 - 21:53 #1
Hej JAHT

Du må gerne poste dit ark til nicolaifogt@gmail.com ... så skal jeg, hvad jeg kan gøre ??

Med venlig hilsen, Nicolai
Avatar billede kabbak Professor
21. januar 2012 - 23:06 #2
Din listbox properties

BoundColumn = 3
ColumnCunt = 3
ColumnWidths= 0 pt;0 pt;10 pt
RowSource=Ark1!B:D

Kode under listboxen

Private Sub ListBox1_Click()
TextBox1 = Me.ListBox1.Column(0)
End Sub

thats all
Avatar billede brynil Nybegynder
21. januar 2012 - 23:07 #3
Brug ListIndex værdien til at finde rækken for den værdi du har valgt.

Hvis værdierne i din listbox er hentet fra kol. D række 1 til 9, så vil ListIndex værdien være nogenlunde tilsvarende. Læg til eller træk fra så ListIndex værdien passer med dine rækkenr.

Så kan du efterfølgende blot referere til cellen i kol. B med ListIndex værdien +/- som rækkeværdi.

Ex.:
Debug.Print Sheets("Ark1").ComboBox1.ListIndex
Avatar billede Ialocin Novice
27. januar 2012 - 22:53 #4
Hej Jacob

For go´ ordens skyld, så kommer her lige teksten/løsningen, som jeg har postet til dig.

-------------------

Der er en del rettelser/tilføjelser til dine koder, som jeg vil forsøge at liste op herunder.
Tilføjelser er markeret med fed skrift.


I modulet: Vis_Userform har jeg slettet en del linier, så koden under cmdÅbenUserFormIndtastning() knappen ser således ud ...

Sub cmdÅbenUserFormIndtastning()
   
    'åbn userform3
    UserForm3.Show
   
End Sub



På formen: UserForm3 har jeg ændret følgende ...


I proceduren: udfyldCombo() har jeg tilføjet en if sætning, som leder frem til en nyoprettet procedure, hvis combonavnet er Namecb.
Det er gjort, da din "normale" fyld combobox med AddItem ikke fungerer, da comboen Namecb indeholder 2 kolonner.


Private Sub udfyldCombo()
Dim omRåderne As Variant, ix As Byte, combo As Object, comboNavn As String
    omRåderne = Array("NameAktier", "NameAktierUdenlandske", "NameObl", "NameOblUdenlandske", "NameInv")        '<---- kan ajourføres
    faneNavn = MultiPage1.SelectedItem.Caption
    comboNavn = findComboNavn(LCase(faneNavn))
    If comboNavn <> "" Then
   
            'hvis combonavnet er NameCB, så fyld værdier i comboboxen via mitarray i proceduren FyldComboboxNamecb
            If comboNavn = "Namecb" Then
                                                 
                    'fyld comboboxen Namecb
                    FyldComboboxNamecb
             
            Else

   
                Set combo = UserForm3.Controls(comboNavn)
                combo.Clear
       
                For ix = 0 To UBound(omRåderne)
                    For Each cc In ActiveWorkbook.Sheets("Oversigt").Range(omRåderne(ix))
                        If cc.Value <> "" Then
                            combo.AddItem cc
                        End If
                    Next cc
                Next ix
               
                sortering combo
          End If

    End If
End Sub



Den nyoprettede procedure: FyldComboboxNamecb() som fylder mitarray med den fundne værdien i kolonne D og B
Efter at mitarray er blevet fyldt med de aktuelle værdier, kaldes endnu en nyoprettet procedure, som sorterer comboboxen Namecb

Private Sub FyldComboboxNamecb()
Dim i As Integer    'tællevariabel
Dim c As Range      'objektvariabel
Dim l As Integer    'tælle variabel til MitArray
'sæt tælle variabel = 0
l = 0
'opret MitArray
Dim mitarray() As Variant
'redimensioner mitarray med 2 kolonner og 1 række
ReDim mitarray(1, 0)
'comboboksen skal indeholde 2 kolonner
UserForm3.NameCB.ColumnCount = 2
   
   
    '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 er med skrevet med fed skrift
            If c.Value <> "" And c.Font.Bold = False And c.Font.Italic = False Then
           
                    'opret række i MitArray
                    'giv kolonne 1 værdien fra kolonne B ud for den aktive celle
                    mitarray(0, l) = c.Offset(0, -2).Value
                   
                    'giv kolonne 2 værdien fra den aktive celle
                    mitarray(1, l) = c.Value
           
                    'tæl tælle variablen l op med 1
                    l = l + 1
                   
                    'redimensioner MitArray
                    ReDim Preserve mitarray(1, l)
               
                           
            End If
   
    'næste celle
    Next
   
    'træk den sidste tomme række ud af mitarray
    ReDim Preserve mitarray(1, l - 1)
   
    'tilføj comboboksen værdierne fra mitarray
    UserForm3.NameCB.Column() = mitarray

    'kald proceduren sorterComboboxNamecb
    sorterComboboxNamecb

End Sub



Den nyoprettede procedure: SorterComboboxNamecb() som tildeler sarray værdierne fra comboboxen, hvorefter sarray sorteres efter kolonne 1 = kolonne D på regnearket
Efter at sarray er blevet sorteret bliver comboboxen Namecb column-egenskab tildelt sarray kolonne værdier.


Public Sub SorterComboboxNamecb()
Dim antal As Long, cc As Object
Dim sarray(), ix As Long, j As Long
Dim byt1 As Variant
Dim byt2 As Variant
           
            'sæt antal = med antallet af rækker i comboboxen
            antal = UserForm3.NameCB.ListCount
                       
            'redimensioner sarray til 2 kolonner samt antal rækker i comboboxen Namecb minus 1
            ReDim sarray(1, antal - 1)
       
            'fyld værdier i sarray fra comboboxen Namecb
            For ix = 1 To antal
                'kolonne 1
                sarray(0, ix - 1) = UserForm3.NameCB.Column(0, ix - 1)
                'kolonne 2
                sarray(1, ix - 1) = UserForm3.NameCB.Column(1, ix - 1)
               
            Next ix
           
           
           
           
            'udfør sorteringen af værdierne i comboboxens kolonne 1 = kolonne D på regnearket
            'ta´ værdierne fra kolonne B på regnearket med over i comboboxens kolonne 0
            For ix = antal - 1 To 1 Step -1
                For j = 1 To ix
               
                    If sarray(1, j - 1) > sarray(1, j) Then
                       
                        'kolonne 1
                        byt1 = sarray(0, j - 1)
                       
                        'kolonne 2
                        byt2 = sarray(1, j - 1)
                       
                       
                        'kolonne 1
                        sarray(0, j - 1) = sarray(0, j)
                       
                        'kolonne 2
                        sarray(1, j - 1) = sarray(1, j)
                       
                       
                        'kolonne 1
                        sarray(0, j) = byt1
                       
                        'kolonne 2
                        sarray(1, j) = byt2
                   
                    End If
               
                Next j
           
            Next ix
           
   
   
  'tildel comboboxen de sorterede værdier
  UserForm3.NameCB.Column() = sarray
   
End Sub



Slutteligt har jeg kodemæssigt skrevet lidt i comboboxen Namecb´s klik hændelse.
Ved et klik på en værdi i comboboxen tildeles textbox10 værdien af bærenummeret (fra kolonne 0 i comboboxen) der tilhører den klikkede værdi.

Private Sub NameCB_Click()
   
    'sæt textboksen bærenummer = værdien fra kolonne B i forhold til den valgte værdi på listen
    Me.TextBox10.Value = Me.NameCB.Column(0)

End Sub



Og som rosinen i pølseenden ...
Så har jeg skjult kolonne 0 i comboboxen Namecb via boxens: Properties > ColumnWidths som er sat til:  0 pt;200 pt ... hvilket gør, at 1. kolonne ikke vises, da dens bredde er sat til 0.

----------------

Med venlig hilsen, Nicolai
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