VBA - Userform voor meer dan één macro gebruiken.

Status
Niet open voor verdere reacties.

Roeland035

Gebruiker
Lid geworden
30 mrt 2015
Berichten
291
Beste Forumleden,

Ik heb een UserForm gemaakt die dient als een progressie indicator van een macro.
Wanneer ik 9 bestanden aan het importeren ben dan geeft hij per file dat geïmporteerd is de veranderingen aan, oftewel:
Er zijn 9 bestanden gevonden:

1/9
2/9
3/9
.
.
9/9
Klaar.

Momenteel roep ik de userform aan met een .Show functie.
Code:
Sub StartMacro()
    frmProgressBar.LabelProgress.Width = 0
    frmProgressBar.Show
    DoEvents
End Sub
Vervolgens staat er in de userform zelf een Call functie die de macro aanroept waar die mee moet gaan werken.
Code:
Private Sub UserForm_activate()
    Call Missing2
End Sub

Maar het liefst zet ik er nog een Call functie in die verwijst naar een andere Macro zodat ik de gehele UserForm niet nog een keer hoef na te maken.
Maar hoe weet hij dan uit welke "Call" hij moet kiezen.
Is dit mogelijk?
 
Laatst bewerkt:
Op mijn computer gaat zoiets zo snel dat de voortgangsindicator niet eens te zien is.
 
Op mijn computer gaat zoiets zo snel dat de voortgangsindicator niet eens te zien is.

Nouja, de macro moet allemaal .xls files openen en daarvan de inhoud kopieëren, plakken in het hoofdbestand, file weer sluiten -> Next

Het gaat redelijk vlot inderdaad. Maar soms zijn het 10 files, maar soms ook 100.

Maar ik ben er al achter gekomen van hoe je redelijk vlot een userform kunt kopiëren. Je moet vervolgens alleen de verwijzingen een beetje aanpassen.
Alsnog zou ik het handig vinden om te weten of mijn vraag mogelijk is.
 
om xls uit te lezen hoef je ze echt niet zichtbaar te openen.

Maak eens gebruik van

Code:
with getobject("G:\OF\bestand.xls")
  sn=.sheets(1).usedrange
  .close 0
End With

PS. verzin eerst handige code voordat je oplossingen voor onhandige code gaat bedenken (die je macro bovendien alleen nog maar vertragen: 'van de regen in de drup')
 
Ik zal je code eens proberen, maar de snelheid interesseert mij echter niet veel. Mij gaat het om de vraag die ik stelde.
 
Ik begrijp de vraag niet echt. Als dat is om het userform met de progressbar overal vandaan te kunnen gebruiken hoef je alleen maar een userform te maken met als enig object die ProgressBar. Als je dat userform dan wil gebruiken, waar dan ook vandaan in je project, dan moet je hem Modeless openen, als volgt:
ProgressBarForm.show vbModeless

Dan is er geen enkele noodzaak om vanuit dat formulier een routine aan te te roepen omdat je dan vanuit iedere routine de attributen van de ProgressBar kan zetten, zoals .Min, .Max, .Width en .Value. Bijvoorbeeld:
ProgressBarForm.ProgressBar1.Min = 1
ProgressBarForm.ProgressBar1.Max = 100


Voorbeeldje met 1 userform waarin 1 progressbar met een label en 2 routines die er gebruik van maken:
Bekijk bijlage ProgressBarGebruik.xlsm
 
Laatst bewerkt:
Ik begrijp de vraag niet echt. Als dat is om het userform met de progressbar overal vandaan te kunnen gebruiken hoef je alleen maar een userform te maken met als enig object die ProgressBar. Als je dat userform dan wil gebruiken, waar dan ook vandaan in je project, dan moet je hem Modeless openen, als volgt:
ProgressBarForm.show vbModeless

Dan is er geen enkele noodzaak om vanuit dat formulier een routine aan te te roepen omdat je dan vanuit iedere routine de attributen van de ProgressBar kan zetten, zoals .Min, .Max, .Width en .Value. Bijvoorbeeld:
ProgressBarForm.ProgressBar1.Min = 1
ProgressBarForm.ProgressBar1.Max = 100


Voorbeeldje met 1 userform waarin 1 progressbar met een label en 2 routines die er gebruik van maken:
Bekijk bijlage 237013

Precies wat ik bedoelde :)

Veel dank!

Ik weet namelijk bijna niks van UserForms en het enige wat ik op het internet vond, was dat ik vanuit de UserForm programmacode een macro moest callen.

Maar vbModeless is dus de uitweg.
 
Dat is dus de handige oplossing waar snb het over had ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan