08. juli 2010 - 10:05Der 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?
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.
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
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.
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
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
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...
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
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
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.