• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Oplossing voor trage excel?

Status
Niet open voor verdere reacties.

Excelvbas01

Gebruiker
Lid geworden
7 apr 2020
Berichten
165
Mijn excel is traag en dat komt door deze code.
Code:
With listbox2
     .list=sheets("Bladw").cells(1).CurrentRegion.Value
For i = .ListCiunt - 1 to 0 Step -1
      If InStr(LCase(Join(application.Index(.List(), i + 1, 0))), LCase(ID.Value)=0 then .RemoveItem i
Next i

End with

In tabblad 1 heb ik een lijst met klanten en in tabblad "BladW" heb ik een lijst met socialmedia accounts, gekoppeld med ID aan klant(en).
Wanneer ik in listbox1 op klant1 klik, dan krijg ik de bijbehorende socialmedia te zien in Textbox. Ik gebruik hiervoor de bovenstaande code.
Het probleem is dat deze code vertraagt enorm en zeker als ik veel rijen heb.

Ik heb deze code
Code:
Application.ScreenUpdating = False
geprobeerd maar het probleem blijf.

Weet iemand een oplossing hiervoor.
 
Wat dacht je van een voorbeeldbestand met dummy gegevens.
 
Dit....
Code:
For i = .List[COLOR=#ff0000]Ciunt[/COLOR] - 1 to 0 Step -1
...kan nooit werken.
 
Code:
For i = .ListCiunt - 1 to 0 Step -1
Dit was een tikfoutje.
Ik heb een bestand bijgevogd. Deze doet het nog goed maar wanneer rijen eerbij komen dan gaat het bstand steeds trager.
 

Bijlagen

Join(application.index is de boosdoener, maar dat wist ik al uit ervaring.

Als de tabel zich in breedte toch niet uitbreidt is dit een oplossing incl. vergelijking op grote-kleine letters
Code:
If InStr(1, .List(i, 0) & .List(i, 1) & .List(i, 2) & .List(i, 3) & .List(i, 4) & .List(i, 5), Id.Value, 1) = 0 Then .RemoveItem i
 
Het bestand is in de breedte wel uitgebreidt.
Het bestand wat ik eerder heb bijgevoegd is een voorbeeld. Ik heb niet alle kolomen meegenomen.

Ik ga t proberen met deze code.
Code:
If InStr(1, .List(i, 0) & .List(i, 1) & .List(i, 2) & .List(i, 3) & .List(i, 4) & .List(i, 5), Id.Value, 1) = 0 Then .RemoveItem i
 
Allen bedankt voor het meedenken.
HSV heeft de oplossing. Ik heb t geprobeerd en het werkt goed.
Bedankt HSV :thumb:
 
nog sneller:

Code:
Dim dic
Private Sub UserForm_Initialize()
    ListBox1.List = Blad1.Cells(1).CurrentRegion.Value
    ComboBox1.List = ListBox1.List
    
    sn = Blad3.Cells(1).CurrentRegion
    Set dic = CreateObject("scripting.dictionary")
    For j = 2 To UBound(sn)
      dic(sn(j, 1)) = dic(sn(j, 1)) & "_" & sn(j, 2)
    Next
End Sub

Code:
Private Sub ListBox1_Change()
   With ListBox1
     For j = 0 To 5
       Me("textbox" & j) = .Column(j)
     Next
   End With
End Sub

Code:
Private Sub ComboBox1_Change()
 With ComboBox1
     For j = 0 To 5
       Me("textbox" & j) = .Column(j)
     Next
   End With
End Sub

Code:
Private Sub TextBox0_Change()
   If Len(TextBox0) = 11 Then ListBox2.List = Split(dic(TextBox0.Value), "_")
End Sub

Verander de namen van de textvakken in textBox0 tot TextBox 5
Het ID vak wordt dan TextBox0
 
SNB bedankt voor het meedenken. Als ik jouw code ga gebruiken dan moet ik hele bestand aanpassen en dat is behoorlijk wat werk.
Oplossing van HSV kon ik zo in plakken zonder al te veel aanpassing. De oplossing van HSV is wel wat sneller dat wat ik had maar hij is nog steeds traag. Ik kan wel meeleven.
Ik heb veel data en dat kan kennelijk excel niet aan. Ik hoop dat iemand toch een manier heeft om excel sneller te laten werken zonder al te veel aanpassingen.
 
5 tekstvakken een andere naam geven 'veel werk' ?
 
Het bestand wat ik heb geupload is een voorbeeld voor de code die ik gebruikte. Moeder bestand is veel uitgebreider. Als het ging om een paar textboxen dan had ik dat zeker gedaan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan