• 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.

Met een Excel userform data uit acces halen

Status
Niet open voor verdere reacties.

Bendepater

Gebruiker
Lid geworden
16 jan 2009
Berichten
55
Wie kan mij helpen. Ik heb een userform in excel die de data uit excel zoekt. Het probleem is dat er meer als 400.000 regels zijn waardoor het zoeken zeker zo`n 13 a 14 seconden duurt. Nu is mijn vraag wanneer ik er een acces database aanhang zal het zoeken dan sneller gaan en hoe moet ik de link gaan leggen ik heb wat dat betreft nog onvoldoende ervaring met acces.

ik heb een oud voorbeeld bestand toegevoegd maar de bedoeling is dus dat ik niet zoek in excel maar in acces databaseBekijk bijlage Zoeken.rar
 
Enkele vragen.
Ik veronderstel dat de contractnummers in 1 kolom staan, waarom dan een zoekactie in 12 kolommen ?
Al eens geprobeerd om de kolom met contractnummers in VBA in een array te gieten en daarin de zoekactie uit te voeren om alzo een regelnummer terug te geven ?

Ik heb de test uitgevoerd met een array van 400000 regels (A3:A400002) en ik had amper 1sec nodig om getal 400000 te zoeken en regelnr 400002 terug te krijgen in een msgbox

Ik heb de code van je voorbeeldbest. eens aangepast. Wijzig deze eventueel naar de juiste situatie (werkbladnaam en bereik) en
test deze dan eens uit op een groot bereik.
Code:
Private Sub haalgegevensop_Click()
Application.ScreenUpdating = False
Dim code As Integer
With Worksheets("gegevens")
sq = .Range("E3:E" & .Cells(Rows.Count, 5).End(xlUp).Row)
    For i = LBound(sq) To UBound(sq)
        If CStr(sq(i, 1)) = Me.contractnummer Then code = i + 2
    Next
    If code = 0 Then
        MsgBox "Sorry contractnummer komt niet voor in de database, probeer opnieuw"
    Else
        invoer.Text = .Range("B" & code).Text
        datuminvoer.Text = .Range("J" & code).Text
        tijdstipinvoer.Text = .Range("K" & code).Text
        datumwijziging.Text = .Range("J" & code).Text
        naamklant.Text = .Range("D" & code).Text
        betreft.Text = .Range("C" & code).Text
        gewijzigddoor.Text = .Range("I" & code).Text
        omschrijving.Text = .Range("F" & code).Text
        status.Text = .Range("M" & code).Text
        tijdwijziging.Text = .Range("K" & code).Text
        gevondencontract.Text = .Range("E" & code).Text
        genomenactie.Text = .Range("L" & code).Text
      End If
On Error GoTo 0
End With
Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Enkele vragen.
Ik veronderstel dat de contractnummers in 1 kolom staan, waarom dan een zoekactie in 12 kolommen ?
Al eens geprobeerd om de kolom met contractnummers in VBA in een array te gieten en daarin de zoekactie uit te voeren om alzo een regelnummer terug te geven ?

Ik heb de test uitgevoerd met een array van 400000 regels (A3:A400002) en ik had amper 1sec nodig om getal 400000 te zoeken en regelnr 400002 terug te krijgen in een msgbox

Ik heb de code van je voorbeeldbest. eens aangepast. Wijzig deze eventueel naar de juiste situatie (werkbladnaam en bereik) en
test deze dan eens uit op een groot bereik.
Code:
Private Sub haalgegevensop_Click()
Application.ScreenUpdating = False
Dim code As Integer
With Worksheets("gegevens")
sq = .Range("E3:E" & .Cells(Rows.Count, 5).End(xlUp).Row)
    For i = LBound(sq) To UBound(sq)
        If CStr(sq(i, 1)) = Me.contractnummer Then code = i + 2
    Next
    If code = 0 Then
        MsgBox "Sorry contractnummer komt niet voor in de database, probeer opnieuw"
    Else
        invoer.Text = .Range("B" & code).Text
        datuminvoer.Text = .Range("J" & code).Text
        tijdstipinvoer.Text = .Range("K" & code).Text
        datumwijziging.Text = .Range("J" & code).Text
        naamklant.Text = .Range("D" & code).Text
        betreft.Text = .Range("C" & code).Text
        gewijzigddoor.Text = .Range("I" & code).Text
        omschrijving.Text = .Range("F" & code).Text
        status.Text = .Range("M" & code).Text
        tijdwijziging.Text = .Range("K" & code).Text
        gevondencontract.Text = .Range("E" & code).Text
        genomenactie.Text = .Range("L" & code).Text
      End If
On Error GoTo 0
End With
Application.ScreenUpdating = True
End Sub


Hoi Dank voor de snelle reactie. Ik ging van nummers uit maar het zijn officeel postcodes, dacht dat dit geen wezenlijk verschil zou moeten geven maar blijkbaar is dat wel zo. Ik heb het geprobeerd maar dan krijg ik een error. Daarnaast zijn er inderdaad geen 12 kolommen maar 5 kolommen.
 
Laatst bewerkt:
Hoi Dank voor de snelle reactie. Ik ging van nummers uit maar het zijn officeel postcodes, dacht dat dit geen wezenlijk verschil zou moeten geven maar blijkbaar is dat wel zo. Ik heb het geprobeerd maar dan krijg ik een error. Daarnaast zijn er inderdaad geen 12 kolommen maar 5 kolommen.


Wanneer ik test met nummers gaat deze tot precies 32864 en ook met postcodes dus daar ligt het niet aan. Kom ik daarboven geeft excel de volgende foutmelding:
ik krijg de melding fout 6 tijdens uitvoering:

Overloop
 
Je zal toch met een concreet voorbeeld moeten komen, want zoals ik al zei heb ik met 400000 regels in XL2007 geen enkel probleem.
 
Wijzig in de code onderstaande regel
Code:
Dim code As Integer
in
Code:
Dim code As Long
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan