12. juli 2010 - 13:55Der er
12 kommentarer og 1 løsning
Hjælp til at forklare kode...
Hej,
Jeg har "stjålet" den her kode fra kabbak:
Public Sub test2() Dim RW As Long, D As Variant, I As Long RW = Range("O65536").End(xlUp).Row + 1 D = Range("O1:O" & RW) For I = RW To 2 Step -1 If D(I - 1, 1) = "U" Then Range("O" & I).EntireRow.Insert Range("O" & I).Select Exit For End If Next D = Empty End Sub
Nu prøver jeg bare at finde en den værdi der er valgt i en combobox (cbid) i en formular (frmtrs) i stedet for som her "U". Og jeg prøver at finde den i range B21:B65536. Men jeg får "Subscript out of range ved linjen "If D(I-1, 1).... Kan nogen forklare hvorfor det går galt? Her er min egen kode:
Public Sub Findogret()
Dim RW As Long, I As Long, D As Variant, CBV 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) CBV = frmtrs!cbid.Value
For I = RW To 20 Step -1 ' læser baglæns, for st finde det sidste U If D(I - 1, 1) = CBV Then
Hvis det er den sidste forekomst du søger så prøv denne
Hvad er frmtrs!cbid.Value ?
Sub tst() CBV = frmtrs!cbid.Value RW = Range("B65536").End(xlUp).Row + 1 Range("B21").Select For t = 1 To Application.CountIf(Range("B21:B" & RW), CBV) Range("B" & ActiveCell.Row & ":B" & RW).Find(CBV, LookIn:=xlValues).Select Next End Sub
Tak for svar, excelent. Men jeg er lidt i tvivl...
Jeg søger ikke den "sidste forekomst". Tallene i kolonnen er unikke, hvilket jeg måske burde have skrevet. Der er altså tal fra 1 til "antal rækker", og hvert tal forekommer kun en gang.
Værdien i cbid er så netop det tal fra den kolonne, som brugeren har valgt, altså fra 1 til det antal poster der er oprettet, fx "32", hvis der er oprettet 32 poster.
Og jeg ville meget gerne forstå hvad s.... der sker i den linje med If D(I-1, 1)...
Det jeg vil er kort: - Jeg har en form, hvor en bruger kan ændre, slette og tilføje poster - Brugeren vælger et ID i en combobox (cbid) - Så vises det ID's data (navn, dato, type mv.) i combo- og tekstbokse - Brugerne kan også tilføje nyt ID. Så oprettes et nyt med +1 nummer højere end det højeste nu - Brugerne kan også slette, så findes den post der skal slettes (valg i cbid) og linjen med den posts data slettes (entirerow.delete) - Alle ID'er og deres data er i rækker i arket "Dashboard", og ID står i B21 og ned
Så det jeg vil bruge koden til er at finde den celle i kolonne B, som har en værdi magen til den der er valgt i comboboxen cbid! :)
Grunden til at jeg har ! er pga af referencen til userform'en: "frmtrs!cbid" - altså cbid comboboxen i userform frmtrs.
OK, tak for det - det er jo en meget kortere kode... Men jeg kunne stadig rigtig godt tænke mig at vide, hvad der sker i kabbaks kode og hvorfor jeg får værdier uden for variablens rækkevidde :).
Hvis vi antager at der er data til og med række 40 i kolonne B så vil følgende linie D = Range("B21:B" & RW) reelt indeholde værdier for området B21:B40
Men den første værdi i variablen D er D(0,1) som svarer til værdien i celle B21 Næste værdie i D er D(1,1) som svarer til værdien i celle B22. Sidste værdi i D er så D(20,1) som svarer til værdien i celle B40
Når du så med følgende linie For I = RW To 20 Step -1 forsøger du jo at hente D(40,1) som ikke findes i variablen D, den højeste værdi er jo D(20,1)
I øvrigt er jeg ret sikker på at kabbaks kode virkede til det den var tiltængt :-)
God forklaring, men jeg er stadig desværre ikke helt med :). Jeg har også prøvet med 2 og 1 i stedet for 20 og 21 i "For I = RW To 20 Step -1" og det gav samme fejl.
Hvad er (0,1) osv - betyder det celler, rækker eller kolonner eller hvad? Den venstre værdi tæller op, men den højre bliver ved med at være 1?
Ah, så er jeg med. Mange tak :). Jeg accepterer dit svar!
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.