Balkje met voortgang macro

Status
Niet open voor verdere reacties.

giten

Gebruiker
Lid geworden
2 feb 2009
Berichten
80
Ik heb een erg lange VBA-code geschreven. Het uitvoeren hiervan kan soms wel minuten duren. Om een beetje zicht op de voortgang te hebben heb ik in 1 cel een soort 'teller' gezet. Hierin berekent VBA hoeveel procent van de loop al is gedaan. Om dit zichtbaar te maken zet ik iedere keer screen update even aan en daarna weer uit. Dit zorgt er echter natuurlijk wel voor dat het scherm gaat knipperen en dat de matrix langzamer werkt.

Dit is de code die ik gebruik hiervoor:

teller7 = teller7 + 1
Sheets("resultaat").Select
Application.ScreenUpdating = True
Sheets("resultaat").Range("g1") = teller7 / (UBound(array1) * UBound(array2) * (UBound(array3) - 1) * IIf(Sheets("invoer").Range("m11") > 2, UBound(array4), 1) + UBound(array3))
Application.ScreenUpdating = False

Is er misschien een manier om dit te doen zonder dat ik screen update aan hoef te zetten? Een balkje of percentage o.i.d. is allemaal goed.
 
Laatst bewerkt:
Het is waarschijnlijk handiger te proberen je macro sneller te laten werken (o.a geen select of activate, screenupdating =false, enableevents=false, .calculation=xlcalculationmanual, de werkbladen in een matrix in te lezen en daarmee te werken en alleen op het einde van de macro gegevens weg te laten schrijven in een werkblad.)
 
Ik heb inderdaad veel select. Maar mijn tabblad is zo groot met zoveel berekeningen dat ik dat niet allemaal in VBA kan berekenen. Althans, ik weet in ieder geval niet hoe.

De screenupdating heb ik inderdaad uit (behalve bij die 'teller'). Maar wat is enableevents en .calculation=xlcalculationmanual? En wat bedoel je met de werkbladen in een matrix inlezen?
 
Laatst bewerkt:
Plaats eens een stukje van je code dan zul je zien wat er allemaal versneld kan worden. En gebruik F1 van de VBEditor en F2 van de VBeditor om onbekende termen op te zoeken.
 
Dat met die F1 en F2 ga ik eens proberen. Bedankt!


Het stukje code dat het zo langzaam maakt is dit:

For teller6 = 1 To UBound(array3) - 1

If Sheets("invoer").Range("c11") = "Soort1" Then
Sheets("sheet1").Range("c" & teller6 * 7 + 56) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 56), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 57) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 57), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 58) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 58), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 59) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 59), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 60) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 60), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 61) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 61), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 62) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 62), Sheets("Voer").Range("ai:al"), 2, 1)

Else

If Sheets("invoer").Range("c11") = "Soort2" Then
Sheets("sheet1").Range("c" & teller6 * 7 + 56) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 56), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 57) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 57), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 58) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 58), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 59) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 59), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 60) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 60), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 61) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 61), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 62) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 62), Sheets("Voer").Range("ai:al"), 3, 1)
Else

Sheets("sheet1").Range("c" & teller6 * 7 + 56) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 56), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 57) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 57), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 58) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 58), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 59) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 59), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 60) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 60), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 61) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 61), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 62) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 62), Sheets("Voer").Range("ai:al"), 4, 1)
End If
End If


If Sheets("sheet1").Range("b" & teller6 + 35).Value < Sheets("invoer").Range("c17") Then
Sheets("sheet1").Range("d" & teller6 + 35) = Sheets("sheet1").Range("d" & teller6 + 34).Value
Sheets("sheet1").Range("g" & teller6 + 35) = 0
Sheets("sheet1").Range("j" & teller6 + 35) = 0
Sheets("sheet1").Range("l" & teller6 + 35) = 0

Else

If Sheets("sheet1").Range("b" & teller6 + 35).Value >= Sheets("invoer").Range("c17") And _
Sheets("sheet1").Range("d" & teller6 + 34).Value - Sheets("invoer").Range("c16").Value > 0 Then
Sheets("sheet1").Range("d" & teller6 + 35) = Sheets("sheet1").Range("d" & teller6 + 34).Value - Sheets("invoer").Range("c16").Value
Sheets("sheet1").Range("g" & teller6 + 35) = 100 - Sheets("sheet1").Range("d" & teller6 + 35).Value
Sheets("sheet1").Range("j" & teller6 + 35) = 0
Sheets("sheet1").Range("l" & teller6 + 35) = 0

Else

If (Sheets("sheet1").Range("b" & teller6 + 35).Value >= Sheets("invoer").Range("c17") And _
Sheets("sheet1").Range("b" & teller6 + 35).Value < Sheets("invoer").Range("c18") And _
Sheets("sheet1").Range("d" & teller6 + 34).Value - Sheets("invoer").Range("c16").Value <= 0) Or _
Sheets("invoer").Range("c15").Value < 3 Then
Sheets("sheet1").Range("d" & teller6 + 35) = 0
Sheets("sheet1").Range("g" & teller6 + 35) = 100
Sheets("sheet1").Range("j" & teller6 + 35) = 0
Sheets("sheet1").Range("l" & teller6 + 35) = 0

Else


If Sheets("sheet1").Range("b" & teller6 + 35).Value >= Sheets("invoer").Range("c18") And _
Sheets("sheet1").Range("g" & teller6 + 34).Value - Sheets("invoer").Range("c16").Value > 0 Then
Sheets("sheet1").Range("d" & teller6 + 35) = 0
Sheets("sheet1").Range("g" & teller6 + 35) = Sheets("sheet1").Range("g" & teller6 + 34).Value - Sheets("invoer").Range("c16").Value
Sheets("sheet1").Range("j" & teller6 + 35) = 100 - Sheets("sheet1").Range("g" & teller6 + 35).Value
Sheets("sheet1").Range("l" & teller6 + 35) = 0

Else

Sheets("sheet1").Range("d" & teller6 + 35) = 0
Sheets("sheet1").Range("g" & teller6 + 35) = 0
Sheets("sheet1").Range("j" & teller6 + 35) = 100
Sheets("sheet1").Range("l" & teller6 + 35) = 0
 
Deze code
Code:
   with sheets("voer").cells(1,35)
     sn=.resize(.currentregion.rows.count,4)
   end with

  for j=1 to ubound(sp)-1
    for jj=56 to 62
       With Sheets("Sheet1").cells(j*7+jj)
         .Value=sn(worksheetfunction.match(.offset(,1),sn),right([sheet1!C11],1)+2)
       end with
    next
  Next
moet voldoende zijn ter vervanging van :

If Sheets("invoer").Range("c11") = "Soort1" Then
Sheets("sheet1").Range("c" & teller6 * 7 + 56) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 56), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 57) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 57), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 58) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 58), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 59) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 59), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 60) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 60), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 61) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 61), Sheets("Voer").Range("ai:al"), 2, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 62) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 62), Sheets("Voer").Range("ai:al"), 2, 1)

Else

If Sheets("invoer").Range("c11") = "Soort2" Then
Sheets("sheet1").Range("c" & teller6 * 7 + 56) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 56), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 57) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 57), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 58) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 58), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 59) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 59), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 60) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 60), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 61) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 61), Sheets("Voer").Range("ai:al"), 3, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 62) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 62), Sheets("Voer").Range("ai:al"), 3, 1)
Else

Sheets("sheet1").Range("c" & teller6 * 7 + 56) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 56), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 57) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 57), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 58) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 58), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 59) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 59), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 60) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 60), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 61) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 61), Sheets("Voer").Range("ai:al"), 4, 1)
Sheets("sheet1").Range("c" & teller6 * 7 + 62) = Application.WorksheetFunction.VLookup(Sheets("sheet1").Range("d" & teller6 * 7 + 62), Sheets("Voer").Range("ai:al"), 4, 1)
End If
End If
 
@snb
je bedoelde waarschijnlijk deze ?
Code:
with sheets("voer").cells(1,35)
     sn=.resize(.currentregion.rows.count,4)
   end with

  for j=1 to ubound([COLOR="Red"]sn[/COLOR])-1
    for jj=56 to 62
       With Sheets("Sheet1").cells(j*7+jj)
         .Value=sn(worksheetfunction.match(.offset(,1),sn),right([sheet1!C11],1)+2)
       end with
    next
  Next
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan