Snellere zoekmethode

Status
Niet open voor verdere reacties.

ReilingJ

Gebruiker
Lid geworden
31 mei 2007
Berichten
168
Voor een redelijk groot bestand (c.a. 15.000 regels) heb ik een filtermethode geprogrammeerd.
Na het scherm van de filtering volgt een scherm waar je door het bestand kunt bladeren m.b.v. command button en waarin alleen de gefilterde waarden worden getoond.
Bij ieder druk op de command button worden de tekstvelden gevuld met de eerstvolgende zichbare regel.
Op zich werkt dit. Echter door het gebruik van "activate" in mijn programma duurt het bladeren wel heel erg lang.
Dit moet beslist sneller kunnen. Wie kent een snellere methode?

De gebruikte code:
Code:
 Dim lastrow As Long
    
    lastrow = Range("B" & Rows.Count).End(xlUp).Row
    
    Do
        ActiveCell.Offset(1, 0).Select
            If ActiveCell.Row >= lastrow Then
            Exit Sub
            End If
        Loop Until Rows(ActiveCell.Row).Hidden = False
       
        TxtKolomb = ActiveCell.Offset(0, -1).Value
        TxtKolomc = ActiveCell.Offset(0, 0).Value
        TxtKolomd = ActiveCell.Offset(0, 1).Value
        TxtKolome = ActiveCell.Offset(0, 3).Value
        TxtKolomf = ActiveCell.Offset(0, 2).Value
        TxtKolomg = ActiveCell.Offset(0, 4).Value
        TxtKolomh = ActiveCell.Offset(0, 5).Value
        TxtKolomi = ActiveCell.Offset(0, 6).Value
        TxtKolomj = ActiveCell.Offset(0, 7).Value
        TxtKolomk = ActiveCell.Offset(0, 8).Value
        TxtKoloml = ActiveCell.Offset(0, 9).Value
        TxtKolomm = ActiveCell.Offset(0, 10).Value
        TxtKolomn = ActiveCell.Offset(0, 11).Value
        TxtKolomo = ActiveCell.Offset(0, 12).Value
        TxtKolomp = ActiveCell.Offset(0, 13).Value
        TxtKolomq = ActiveCell.Offset(0, 14).Value
        TxtKolomr = ActiveCell.Offset(0, 15).Value
        TxtKoloms = ActiveCell.Offset(0, 16).Value
        TxtKolomt = ActiveCell.Offset(0, 17).Value
        TxtKolomj = Format(TxtKolomj, "€#,##0.00")
 
Wijzig dit:
Code:
        ActiveCell.Offset(1, 0).Select
            If ActiveCell.Row >= lastrow Then
            Exit Sub
            End If

Eens in dit:
If ActiveCell.Offset(1, 0).Row >= lastrow Then Exit Sub
 
Wat is hiervan de meerwaarde ?
Dezelfde gegevens zie je toch gewoon in het werkblad ?

gebruik anders de ActiveX listbox of de Listbox in een userform.

Code:
Sub M_snb()
   with sheet1.cells(1).currentregion
     .autofilter 1, "..."
     .offset(1).copy sheet1.cells(1,30
     .autofilter
   end with
   sheet1.listbox1.list=sheet1.cells(1,30).currentregion.value
End Sub
 
Laatst bewerkt:
Beiden dank voor de reactie.

Helaas niet de oplossing waar ik naar op zoek ben. Dat heeft waarschijnlijk te maken met mijn vraagstelling.
De button waar ik naar verwijs staat op een "formulier". Vergelijkbaar met een formulier dat je in eerdere versies van Excel automatisch kon laten maken.
Omdat de sheet waar de gegevens in staan heel veel kolommen bevat wordt/is een regel op het gegevensblad nog al onoverzichtelijk.
Vandaar mijn keuze voor een formulier waar de gegevens van een regel uit het gegevensblad keurig onder elkaar staan.

Een listbox is m.i. geen optie, ik wil de gegevens onder elkaar en niet naast elkaar.

Mijn vraag gaat daarom concreet hierover:
De button heeft als caption "Volgende". iedere keer als op de button wordt gedrukt worden de gegevens van de eerstvolgende zichtbare rij in het formulier gezet.
Maar omdat ik "select" in de code gebruik is dat een nog al trage oplossing.

Volgens mij moet het iets zijn met
Code:
SpecialCells(xlCellTypeVisible)
 
Laatst bewerkt:
Laadt alle gefilterde waarden in een ListBox of Combobobox zoals snb al aangaf. Zet naast de LB of CB een SpinButton zodat je door de lijst kan scrollen en je alle gegevens uit de LB- of CBlijst haalt ipv telkens op je werkblad te gaan zoeken.
 
Die combobox zat al probleemloos in mijn formulier. Daarmee zou ik natuurlijk al kunnen volstaan. Echter ter verfraaing wil ik (maar dat kan blijkbaar niet) ook nog 2 knoppen "volgende" en "vorige".
Een listbox is m.i. geen optie omdat het aantal in te laden kolommen te groot is. Geeft hetzelfde effect als de gegevens raadplegen in de gegevenssheet, waar ik nu juist een formulier voor heb gemaakt.

Waardeer absoluut de bijdrage en het meedenken maar ik ben niet op zoek naar een alternatieve oplossing met LB of CB, maar naar een mogelijk andere code zodat ik genoemde knoppen kan gebruiken.
 
Laatst bewerkt:
Je kunt toch bij iedere listbox_change/combobox_change een aantal textboxen laten vullen met de gegevens uit de eigenschap .list van de combobox/listbox.

Bij iedere wijziging in de combobox/listbox gegevens uit het werkblad inlezen is 'clumsy' en daardoor vertragend.

Blijkbaar weet jij iets wat wij niet weten 'te veel kolommen' in een listbox.

Plaats je bestand eens zou ik zeggen.
 
Hey, zeer bedankt voor het antwoord.

Zou inderdaad kunnen, dat weet ik. Mijn methode werkt absoluut vertragend dat weet ik ook en was ook de reden van mijn vraag op dit forum. Dat de kolommen van mijn sheet sowieso in de listbox passen is ook helemaal waar.
Met alle respect voor het meedenken, dat waardeer ik echt, vind ik dat een listbox in mijn geval niet de ideale oplossing is hoewel ik weet dat dit een alternatief kan zijn.
Ik heb geen verborgen info en het gaat me puur om de methodiek. Samengevat (nogmaals): kun je m.b.v. een opdrachtbutton door een gefilterd bestand scrollen waarbij bij ieder druk op de knop een groot aantal tekstvakken worden gevuld met telkens de eerstvolgende regel, zonder dat je select gebruikt?
 
Het antwoord is ja en de methode heb ik in mijn vorige bericht geschreven.
 
Dank.

Oké kom er op terug. Voor de duidelijkheid, het antwoord is ja met gebruik van LB?
 
Het kan met een userforn met een combobox of listbox en een aantal tekstvakken.
 
Als je commandbutton waarop nu "Volgende" staat vervangt door een SpinButton (pijltje omhoog - pijltje omlaag) kan je door hierop te drukken voorwaarts of achterwaarts scrollen door die ComboBox die je nu al hebt staan. (moet je niet telkens de Combobox openen om een nieuw item te selecteren)
Verder dan vullen van de TextBoxen zoals snb al beschreven heeft.

Heb even simpel voorbeeldje bijgevoegd zodat het misschien wat duidelijker wordt.
 

Bijlagen

  • Voorbeeld_ReilingJ.xlsb
    18,5 KB · Weergaven: 61
Laatst bewerkt:
Ik moet toegeven van de spinbutton maak ik zelden of nooit gebruik. Onbekend maakt onbemmind blijkt nu.
Inmiddels heb ik het overgenomen in mijn programma en mijn probleem is hier inderdaad mee opgelost.





Nogmaals dank.

Jan.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan