Avatar billede gladhund Nybegynder
08. juli 2010 - 10:05 Der er 12 kommentarer og
1 løsning

Rowsource i combobox: Dynamisk range OG til kolonner vist

Hej eksperter,

Jeg har en combobox på en userform, og vil gerne ved activate loade den med værdier fra a2 indtil der ikke er flere data i listen (sidste tomme celle). Men jeg vil også gerne vise værdien fra kolonne B, som med ".ColumnCount = 2". Problemet er, at når jeg bruger forskydning i navnestyring til dynamic range, så kan jeg ikke få kolonne b med i boksen. Kan nogen hjælpe?

Thanx
Avatar billede Ialocin Novice
08. juli 2010 - 12:41 #1
Hej gladhund

Kan dette evt. bruges ?
Koden er sakset fra et af dine tildligere spørgsmål og rettet lidt til ...

Private Sub UserForm_Activate()
Dim RW As Long, RC As Long
 

    'Finder rækken under den sidste udfyldte celle
    RW = Range("A65536").End(xlUp).Row + 1
    RC = RW - 1
   
   
   
    With cboVarer
        .RowSource = "A2" & ":B" & RC
        .ListIndex = 0
        .ColumnCount = 2
        .ColumnWidths = "20,100"
    End With


End Sub

Koden fylder min combobox:  cboVarer ud med værdier fra A2 cellen til sidst udfyldte celle i kolonne B ... og den viser begge kolonner i comboboxen.

mvh Nicolai
Avatar billede gladhund Nybegynder
08. juli 2010 - 16:14 #2
Hej Nicolai :)

Det er sgu fikst... Lige hvad jeg havde brug for - thanx! Svar løs :)
Avatar billede gladhund Nybegynder
08. juli 2010 - 16:39 #3
Nu vi ser på den kodestump, så kan du måske også se, hvorfor jeg får "Subscript out of range" når jeg kører den her?  ;)

Data starter i B21.

Public Sub Findogret()
    Dim RW As Long, D As Variant, I As Long
    RW = Range("B65536").End(xlUp).Row + 1
    ' finder den række der er under den sidste udfyldte celle
    D = Range("B21:B" & RW)
    ' læser cellerne ind i  variabelen D, det er hurtigere at finde i en variabel en ved at
    ' tjekke celler, derfor hastigheden.

    For I = RW To 21 Step -1
        ' læser baglæns, for st finde det sidste U
        If D(I - 1, 1) = frmtrs!cbid.Value Then
            ' når U er fundet
            Range("B" & I).Select
            ' aktiverer cellen
            ActiveCell.Offset(-1, 1).Select
                With ActiveCell
                    .Value = frmtrs!txtnavn.Text
                 
                End With
            Exit For
            ' hopper ud af løkken
        End If
    Next
    D = Empty    ' tømmer variablen
End Sub
Avatar billede Ialocin Novice
08. juli 2010 - 23:29 #4
Hej gladhund

Der kommer et svar senere ... først,

Hvad er det lige der sker i din linie:

If D(I - 1, 1) = frmtrs!cbid.Value Then
 

mvh Nicolai
Avatar billede gladhund Nybegynder
09. juli 2010 - 07:42 #5
Det er jo kabbak's kode - den jeg saksede tidligere, og som du også brugte her. Jeg er ikke sikker på hvad der sker med variablerne D og I (det kan du sikkert gennemskue), men frmtrs!cbid er i hvert fald min combobox med ID, der laves opslag ud fra (vlookup), så der kan gemmes de tilhørende data i netop den række.
Avatar billede Ialocin Novice
09. juli 2010 - 10:44 #6
Hej gladhund


Hvad sker der, hvis du skriver: "Set" foran linie 4 ??

Så´en her:
Set D = Range("B21:B" & RW)


mvh Nicolai
Avatar billede gladhund Nybegynder
09. juli 2010 - 11:14 #7
Hep!

Der sker ingenting... Lige nu får jeg ikke længere "subscript out of range". Den vil gerne gemme når jeg tilføjer en ny post, men ikke en af de eksisterende! Koden ser sådan ud:

Public Sub Findogret()
    Dim RW As Long, D As Variant, I As Long
    RW = Range("B65536").End(xlUp).Row + 1
    ' finder den række der er under den sidste udfyldte celle
  Set D = Range("B21:B" & RW)
    ' læser cellerne ind i  variabelen D, det er hurtigere at finde i en variabel en ved at
    ' tjekke celler, derfor hastigheden.

 

    For I = RW To 21 Step -1
        ' læser baglæns, for st finde det sidste U
        If D(I - 1, 1) = frmtrs!cbid.Value Then
            ' når U er fundet
            Range("B" & I).Select
            ' aktiverer cellen
            ActiveCell.Offset(-1, 1).Select
                With ActiveCell
                    .Value = frmtrs!txtnavn.Text
                   
                   
                   
                   
                End With
            Exit For
            ' hopper ud af løkken
        End If
    Next
    D = Empty    ' tømmer variablen
End Sub
Avatar billede gladhund Nybegynder
09. juli 2010 - 11:23 #8
Det her kan måske hjælpe. Det virker i DENNE kode, hvor rangen med ID blot er A2 og ned i stedet for B21 og ned... (cbid hedder her ComboBox1)

Public Sub Findogret()
    Dim RW As Long, D As Variant, I As Long, CBV As Long
    RW = Range("A65536").End(xlUp).Row + 1
    ' finder den række der er under den sidste udfyldte celle
    D = Range("A1:A" & RW)
    ' læser cellerne ind i  variabelen D, det er hurtigere at finde i en variabel en ved at
    ' tjekke celler, derfor hastigheden.

    CBV = frmret!ComboBox1.Value

    For I = RW To 2 Step -1
        ' læser baglæns, for st finde det sidste U
        If D(I - 1, 1) = CBV Then
            ' når U er fundet
            Range("A" & I).Select
            ' aktiverer cellen
            ActiveCell.Offset(-1, 1).Select
                With ActiveCell
                    .Value = frmret!TextBox2.Text
                End With
            Exit For
            ' hopper ud af løkken
        End If
    Next
    D = Empty    ' tømmer variablen
End Sub
Avatar billede Ialocin Novice
09. juli 2010 - 22:11 #9
Hej gladhund

Jeg sidder og roder med koden p.t. ... men har lige et tillægsspørgsmål for forståelsens skyld :o)

Hvad er det du vil med rutinen findogret()

Brugeren vælger et ID fra comboboxen og den rettes/ overskrives  i kolonnen med ID´er ??? .... eller hva´ ?

mvh Nicolai
Avatar billede gladhund Nybegynder
10. juli 2010 - 12:10 #10
Hep,

Det jeg vil med rutinen er:
1. at finde den post som er valgt i comboboxen cbid (ID'er)
2. slå tilhørende data op (samme række, kolonnerne til højre for
3. overskrive de data med dem der evt er indtastet i userformen

Men din kode fra den anden tråd virker som find og ret rutine! Så principielt behøves denne ikke længere...
Avatar billede gladhund Nybegynder
10. juli 2010 - 19:41 #11
Jeg har blandet trådene sammen i min forvirring :). Anywho... jeg har i en anden tråd fået en kode der kan bruges til præcis det samme. Så med mindre det er for at gennemskue, hvad kabbak gør med den sætning, så kan vi godt lukke ned her :). Jeg skriver lige koden her:


Dim celle As String

Range("B21").Select
Do Until ActiveCell.Value = ""
    ActiveCell.Offset(1, 0).Select
    celle = ActiveCell.Value
    If celle = cbid.Value Then
        Exit Do
    End If
Loop

ActiveCell.Offset(0, 1).Value = txtnavn.Text
Avatar billede Ialocin Novice
11. juli 2010 - 21:48 #12
Hej gladhund

Var også en anelse rundforvirret ;o)

Anyway, tak for ovenstående kode ... her kommer mit "svar" til denne tråd :o)

mvh Nicolai
Avatar billede gladhund Nybegynder
11. juli 2010 - 21:55 #13
Hep,

Beklager forvirringen :). Desværre kan jeg ikke rigtig få gemt mine data - jeg tror at der er noget kage med de værdier formularens kontrolelementer loades med - men det må jeg oprette i et nyt spgm. Den kode her finder i hvert fald den rigtige post, så langt så godt.

MVH

Rasmus
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