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

waarden zoeken

Status
Niet open voor verdere reacties.

computerfreak08

Gebruiker
Lid geworden
20 mei 2008
Berichten
42
Hoe kan ik in vba een code schrijven die gegevens opzoekt uit een ander werkblad zonder dit werkblad eerst te selecteren.

Als ik de find functie gebruik zie je het scherm flikkeren, dat wil ik vermijden.
De verwerking duurt ook langer.
 
Code:
Application.ScreenUpdating = False
'jouw code
Application.ScreenUpdating = True

Kans is ook redelijk groot dat je .Select gebruikt? In veel gevallen hoeft dat niet.

Als je je code post wil ik er wel eens naar kijken.

Wigi
 
computerfreak08 zei:
Als ik de find functie gebruik zie je het scherm flikkeren, dat wil ik vermijden.
De verwerking duurt ook langer
...dit zou moeten helpen...
Code:
Sub ...()

application.screenupdating = false

je code

application.screenupdating = true

End Sub

Groet Leo

EDIT: En zoals ik net in een andere post zei... 'Wim, je moet langzamer leren typen..." :D:D:D
 
Laatst bewerkt:
Bedankt voor jullie reactie allebei Ginger en Wigi.

Ik gebuik geen select maar een gelijkaardige functie zoals ik die ook op de site van Wigi terugvond.
het klopt inderdaad dat het scherm niet fikkert bij het gebruik van screenupdating, maar dan zie je ook geen gegevens verschijnen in het active werkblad waar de gegevens momenteel in worden weggeschreven. Ik zoek voor de find-functie een gelijkaardige oplossing zoals Ginger aanraadt om niet de selectfunctie te gebruiken.
Wat ik bedoelde : als ik een waarde opvraagt van een ander werkblad doe ik het als volgt :

Dim bron, bestemming As Object
Dim waarde1 as string
Set bron = Application.ThisWorkbook.Worksheets("blad1")

Set bestemming = Application.ThisWorkbook.Worksheets("blad2")

waarde1 = bron.cells(1,1).Value
bestemming.cells(1,1).Value = waarde1

Hierbij wordt in vakje A1 op blad2 waarde1 ingevuld zonder dat blad1 geslecteerd wordt.
Je blijft blad2 zien terwijl de gegevens erin worden ingevuld.

de focus wordt wel naar blad1 verplaatst in het geval ik deze functie gebruik.
Waarde opzoeken in bereik A1:S1

With Worksheets("blad1").Range("A1:S1")


Set c = .Find(waarde1, LookIn:=xlValues)

If Not c Is Nothing Then
firstAddress = c.Address

Do
Set c = .FindNext(c)

....;
 
Behalve dat bron geen Variant is en bestemming geen Object, valt daar niet veel aan te wijzigen :thumb:

Code:
Dim bron As Worksheet, bestemming As Worksheet
 
bedankt voor de reactie en verbetering Wim !

bedoel je dat er geen oplossing mogelijk is ?

ik gebruik het voor het volgende (programma voor loonbegroting) :

Werkblad invoer : overzichtsblad waar de gebruiker een reeks gegevens (persoonsgegevens, barema, anciënniteit, arbeidsvolume) kan invullen.
Op basis van deze gegevens wordt per rij (via vba )een werkblad aangemaakt - op basis van een sjabloon - en worden sommige de gegevens uit de rij in dit werkblad in het nieuw aangemaakte werkblad (bvb. persoon1) geplakt. Dit werkblad bevat dan allerhande formules voor het berekenen van loonkosten, kosten woon-werkverkeer. Al deze kosten komen later in nieuwe overzichtsbladen waar ze op verschillende manieren worden weergegeven (afdeling, project,...).

Sommige gegevens uit het werkblad per persoon worden opgehaald (dus eigenlijk opgezocht) uit andere werkbladen (loonschalen, sociaal-abonnement woon-werkverkeer, ... afhankelijk van anciënniteit, functie enz...

Het is tijdens het opzoeken (find) van deze gegevens uit andere werkbladen dat het scherm flikkert (omdat gegevens uit sommige kolommen van andere werkbladen moeten worden opgehaald) en het wat langer duurt vooraleer dus alle gegevens in het werkblad zijn ingevuld.
 
Ik begrijp de vraag waarschijnlijk niet goed, maar flikkeren tegen gaan doe je met ScreenUpdating. Wat is er dat dan nog niet goed zit?
 
De tijd die het in beslag neemt om gegevens te zoeken (find-methode) in andere werkbladen en deze weg te schrijven in het actieve werkblad. Met de find-methode kan je niet vermijden dat het werkblad waarin de gegevens moeten gezocht worden ook effectief geactiveerd wordt. find impliceert select ook al geef je deze select niet mee in de code.

Net zoals er een groot tijdsverschil is tussen het gebruik van select bij het opvragen van waarden uit andere werkbladen of het refereren ernaar zoals ik in de bovengaande post vermeld heb.
 
Met de find-methode kan je niet vermijden dat het werkblad waarin de gegevens moeten gezocht worden ook effectief geactiveerd wordt. find impliceert select ook al geef je deze select niet mee in de code.

Dat durf ik toch wel te betwijfelen ;)

Neem bvb. eens de code van FindNext uit de helpfiles:

Code:
Sub zoeken()
With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing
    End If
End With
End Sub

En zet een aantal 2-tjes in kolom A van het eerste tabblad. Ga dan naar het 2de tabblad en voer de code uit. Wordt volgens mij niet "versprongen".

De tijd die het in beslag neemt om gegevens te zoeken (find-methode) in andere werkbladen en deze weg te schrijven in het actieve werkblad.

Dat het tijd in beslag neemt is nogal logisch, al is dat relatief. Hoeveel gegevens zoek je zo op?

Wigi
 
Je hebt volkomen gelijk Wim.

Het probleem lag dus elders.

De gegevens werden opgehaald uit verborgen werkbladen, die alleen zichtbaar worden gemaakt als er gegevens uit opgehaald worden. Want gegevens opzoeken in verborgen werkbladen is niet mogelijk.
De bladen werden elke keer zichtbaar gemaakt en verborgen bij de aanmaak van elk nieuw werkblad. Ik heb de procedure aangepast door 2 subroutines die de verborgen werkbladen tonen in het begin en verbrergen op het einde van de opdracht.



Hartelijk dank !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan