VBA code verkorten / versnellen

Status
Niet open voor verdere reacties.

PolBE

Gebruiker
Lid geworden
12 okt 2016
Berichten
53
Beste forum

Met de nodige hulp van jullie ben ik al heel ver geraakt met mijn vooropgesteld programma.
Nu zou ik enkele code's willen inkorten/versnellen.

1° Bestaat er een oplossing om deze code op één plaats te zetten zodat je niet bij elke code dit moet herhalen?
Code:
Dim wsL As Worksheet
Set wsL = Worksheets("lijst")

Dim wsD As Worksheet
Set wsD = Worksheets("data")

2° Beide code's zoeken een waarde in een (lange) kolom. Welke van deze beide is de beste/snelste code?
Code:
Range(Bereik).Find(Zoekwoord).Select

Do Until IsEmpty(ActiveCell) 
    If ActiveCell.Value = Zoekwoord Then 
        found = True
        Exit Do
    End If

Hartelijk dank
 
Te weinig informatie voor een zinvol antwoord.
 
1) Zet je dim's boven je subs zodat die global worden , dus overal aanspreekbaar.
2 zet je schermvernieuwing tijdelijk uit en weer aan dit versneld je code aanzienlijk.

Code:
sub test()
Application.ScreenUpdating = False
**je code**
Application.ScreenUpdating = true
end sub
je code
 
OK, ik zal mijn vraag anders stellen, althans voor het eerste deel. (Het andere is niet belangrijk meer).

Normaal zet je een code volledig aan het begin van een procedure, zoals dit;
Code:
Private Sub test()

Sheets("TestBlad").Range("A1") = 20
enz....

End Sub
Als je veel codes hebt en de opdracht of naam is lang doe je dit:
Code:
Private Sub test()
   Dim ws As Worksheet
   Set ws = Worksheets("BladTest")
ws.Range("A1") = 20
enz....

End Sub
Kan deze code nu niet op één plaats staan zodat je ze niet elke keer moet herhalen in alle modules?
Zoiets als:
Code:
Function blad() 'in een aparte module
   Dim ws As Worksheet
   Set ws = Worksheets("BladTest")
End Function
******************
Private Sub test() 'in een andere module
   Call blad
   blad.Range("A1") = 20
End Sub

Het is niet juist want ik heb op verschillende manieren geprobeerd maar dit lukt niet. Kan dit wel?
Als je verschillende tabbladen en modules hebt moet deze code dikwijls worden herhaald en ik dacht dit korter te doen door ze te declareren op één plaats.
Hopelijk is dit duidelijk, bedankt
 
Bv.

In thisworkbook.
Code:
Sub Workbook_Open()
 Set blad = Sheets("BladTest")
End Sub


In een standaard module.
Code:
Sub test()
   blad.Range("A1") = 20
End Sub

in een ander standaard module.
Code:
Public blad As Worksheet
 
HSV: Harry bedankt voor je tip, ik heb dit uitgetest en dit werkt perfect maar niet als je meer bladen wil declareren
Ik heb hier een 6 tal bladen waarvan ik de code korter wou maken maar dit lijkt toch niet te kunnen dan. Toch bedankt voor de tip
Code:
Sub Workbook_Open()
   Set bladD = Sheets("data")
   Set bladH = Sheets("hoofdblad")
   enz.
Hellboy01: Bedankt voor de tip van het filmpje, interessant.
 
Moet je wel declareren in de standaard module met Public.
 
Waarom niet gewoon de namen van de sheets gebruiken ? Wat is BladD nou helemaal korter dan sheets("data") ?
Een werkblad is al een object waarnaar je rechtstreeks kunt verwijzen vanuit willekeurig welke macromodule, in tegenstelling tot een objectvariabele.
Het werkblad is inherent 'Public'.
 
HSV, bedankt voor de tip, ik heb het zo getest en dat werkt wel goed. Ik vraag me alleen af of dit de boel niet vertraagt.
Misschien doe ik nog iets fout maar met sub werkt het bij mij niet wel met Function (nog oude excel 2003)???
Code:
Public Function wsD()
    Set wsD = Sheets("data")
End Function
****
Public Function wsH()
    Set wsH = Sheets("hoofdlijst")
End Function
****
Public Function wsN()
    Set wsN = Sheets("nota")
End Function

snb: ik begrijp je reactie maar ik heb in sommige modules wel 10 'Private sub' staan die naar verschillende bladen verwijzen. Als ik nu in elke module de 5 of 6 bladen moeten verwijzen wordt alles toch minder overzichtelijk, nee?
Je zou kunnen verwijzen in de code zelf zoals je zegt maar ook dan worden sommige codes heel lang
Code:
Dim wsD As Worksheet
Set wsD = Worksheets("data")

Dim wsH As Worksheet
Set wsH = Worksheets("hoofdlijst")
enz.. (wel tot 5 x en dit in verschillende module)
Ik ben tevreden met de oplossing en ga het verder uittesten, bedankt aan allen
 
Laatst bewerkt:
Nu blijkt een ander probleem:

- je bent niet bekend met With ... End With,
- je bent niet bekend met het gebruik van de codenamen van de werkbladen Blad1,blad2,blad3, sheet1,sheet2,sheet3, etc.

Bestudeer dat nog eens even in je VBA handboek.

En maak vooral werkbladnamen niet onnodig lang.
 
Laatst bewerkt:
snb

Met puntje één kan ik je wel een beetje volgen. Ik ga mijn boeken nog eens raadplegen en bekijken of ik de functie With gebruikt heb op alle plaatsen waar het kan. Ik ken dit wel maar gebruik het te weinig.
Voor mij is VBA een hobby dat ik maar af en toe gebruik, nu heb ik weer een projectje en ik ga te veel proberen i.p.v. dingen op te zoeken in mijn boeken.
Soms is het ook een beetje als een boek schrijven, ieder doet dit op zijn manier. Programmeren kan ook op verschillende manieren maar de basis blijft natuurlijk hetzelfde.
Ik neem je opmerking mee en ga me verder verdiepen in de basis van VBA, na pensioen heb je toch tijd (zegt men toch ;-)

Groeten
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan