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

Text box in het midden v.h. scherm i.p.v. gerelateerd aan cellen.

Status
Niet open voor verdere reacties.

jansbl

Gebruiker
Lid geworden
1 mrt 2007
Berichten
86
Hallo,

Bij het runnen van subroutine(s) om het werkboek bij te werken toon ik een textbox op het scherm met een boodschap:

Code:
ActiveSheet.Shapes("Text Box 1454").Visible = True
       hier de update routine
ActiveSheet.Shapes("Text Box 1454").Visible = False

De textbox wordt netjes getoond en verborgen, maar is wel gerelateerd aan de plaats op het werkblad, waar het oorspronkelijk werd geplaatst.
Is het ook mogelijk om de textbox in het midden van het scherm te tonen, zodat het ook zichtbaar is indien de pagina was doorgescrold?

Met vriendelijke groet,

Jans
 
Waarom dan geen MsgBox gebruiken? (evt. met in de MsgBox de inhoud van de bewuste textbox). Lijkt mij wel wat gemakkelijker dan met de eigenschappen van de textbox te gaan "experimenteren".

Wigi
 
Waarom dan geen MsgBox gebruiken? (evt. met in de MsgBox de inhoud van de bewuste textbox). Lijkt mij wel wat gemakkelijker dan met de eigenschappen van de textbox te gaan "experimenteren".

Wigi

Dag Wim,

Dank voor je reactie.

Ik heb gekozen voor een textbox met een mededeling om de volgende redenen:
1. Een textbox kan ik aankleden zoals ik wil (lettertype, grootte, kleur, enz.)
2. Het duurt enige tijd voordat de diverse bladen zijn bijgewerkt. Zeker op wat oudere systemen. Ik wil dan graag dat de textbox blijft staan gedurende het hele updateproces.
3. Ik ben in de veronderstelling dat bij gebruik van een messagebox het updateproces wacht totdat er een knop op de msgbox is ingedrukt. Waarna het proces weer verder gaat, maar dat de msgbox dan weer is verdwenen.​

Als dat laatste niet juist is, kan ik natuurlijk alsnog overwegen om een msgbox te gebruiken.
Kun je me daar nog wat opheldering over verschaffen?

M.vr.gr.,
Jans
 
Dan zou ik opteren voor een userform. Dat kan je ook aankleden gelijk je wil. Probeer maar even zou ik zeggen.
 
Dan zou ik opteren voor een userform. Dat kan je ook aankleden gelijk je wil. Probeer maar even zou ik zeggen.

Dank je Finch.

Heb een userform gemaakt, met daarop de boodschap dat de bladen worden bijgewerkt.

De "bijwerkroutine" is nu ongeveer:

Code:
begin v.d. routine
frmBijwerken.Show
bijwerkroutine
frmBijwerken.Hide
eind v.d. routine

De userform "frmBijwerken" komt wel mooi op het scherm, maar daar stopt de bijwerkroutine. Als ik de userform wegklik gaat de bijwerkroutine verder.

Welke code moet ik in de userform zetten zodat het:
Opkomt aan het begin v.d. bijwerkroutine.
Blijft staan tijdens de bijwerkroutine.
Weer verdwijnt na het uitvoeren v.d. bijwerkroutine.

Alvast weer bedankt,

Jans
 
Da doe je door gebruik te maken van de code

DoEvents

Deze plaats je voor de code die dient te worden uitgegevoerd wannneer de userform zichtbaar is en die evt. je userform update (bv. percentage voortgang).
 
Da doe je door gebruik te maken van de code

DoEvents

Deze plaats je voor de code die dient te worden uitgegevoerd wannneer de userform zichtbaar is en die evt. je userform update (bv. percentage voortgang).

Hi Finch,

Mijn VBA kennis is niet zo formidabel, dus ik vrees dat ik nog wat hulp nodig heb.
Mijn bijwerkroutine is als volgt:
Code:
Sub Updaten()
    Dim ws As Worksheet
    On Error Resume Next
 '   ActiveSheet.Shapes("Text Box 1454").Visible = True
    OpenBijwerkenForm

    Application.ScreenUpdating = False
    
    MaakBladen
    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> "Verzamelblad" And ws.Name <> "Instellingen" Then
            ws.Select
            TabsVerdelen
            Beveiligen
        End If
    Next
    Sheets("Verzamelblad").Select
    Application.ScreenUpdating = True
'    ActiveSheet.Shapes("Text Box 1454").Visible = False
    MsgBox "De Lokatiebladen zijn bijgewerkt", vbInformation, Title:="Je kunt weer doorgaan"
    
End Sub

Betekend jouw opmerking dat ik de bovestaande code NA "OpenNijwerkenForm" tot aan de MsgBox, moet overhevelen naar de code van de Userform?
En zo ja, waar?
Misschien in "Sub UserForm_Activate()"

m.vr.gr.,
Jans
 
Ik heb statement DoEvents zelf nog niet zo heel veel gebruikt, en heb toen ook een beetje moeten experimenteren om het volledig te laten lukken. Mijn uiteindelijke "constructie" was als volgt.

In een module heb ik een sub aangemaakt waar ik de code heb gezet die ik wens uit te voeren wanneer mijn userform te voorschijn komt met de melding van voortgangspercentage e.a.
Na de declaratie van de variabelen in die sub, heb ik het statement DoEvents geplaatst, dus juist voor de eigenlijke code als het ware. Voor de rest heb ik dan enkel wat code bijgevoegd die de inhoud van wat labels op mijn userform wijzigt.

In de activate routine van het userform verwijs ik dan naar de sub in die module die ik daarnet beschreef, gevolgd door een eindmessage op het userform, vervolgens laat ik het userform nog 1 seconde staan, en gebruik dan het Unload Userform statement.
Maar daar ken je enkel de code schrijven die jezelf nodig vind (bv. geen eindmessage, geen wachttijd, ....)

Hopelijk is dit wat duidelijker.
 
Hi Finch,

Bedankt. Het is allemaal goed gelukt.:thumb:
Alleen heb ik het "DoEvents" niet gebruikt en toch schijnt het goed te werken.

Ik heb nu het volgende:
Mijn updateroutine:
Code:
Sub Updaten()
    Dim ws As Worksheet
    On Error Resume Next
    
    Application.ScreenUpdating = False
    
    MaakBladen
    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> "Verzamelblad" And ws.Name <> "Instellingen" Then
            ws.Select
            TabsVerdelen
            Beveiligen
        End If
    Next
    Sheets("Verzamelblad").Select
    Application.ScreenUpdating = True
    
End Sub
Daarnaast mijn userform met de boodschap dat de bladen worden bijgewerkt:
Code:
Private Sub UserForm_Activate()
    Updaten
Unload frmBijwerken

End Sub
Als ik het formulier frmBijwerken oproep, begint he updaten keurig.
Ik weet dus nog niet waarom DoEvents moet worden gebruikt.

Maar ik ben blij dat ik nu op het goede spoor ben.:)

Met vriendelijke groet,

Jans
 
Ik dacht dat de boodschap op uw userform regelmatig moest bijgewerkt worden op basis van de vorderingen. Dat is de reden waarom je die DoEvents nodig hebt. Dus bv. je wilt constant het percentage voortgang tonen aan de gebruiker. Bv. tijdens het bewerken van 100 rijen wil je tonen in % op het userform hoeveel nog moet gebeuren. Bij elke nieuwe rij tel je dus 1% erbij in je label op je userform. Dan dien je gebruik te maken van DoEvents.
 
Ik dacht dat de boodschap op uw userform regelmatig moest bijgewerkt worden op basis van de vorderingen. Dat is de reden waarom je die DoEvents nodig hebt. Dus bv. je wilt constant het percentage voortgang tonen aan de gebruiker. Bv. tijdens het bewerken van 100 rijen wil je tonen in % op het userform hoeveel nog moet gebeuren. Bij elke nieuwe rij tel je dus 1% erbij in je label op je userform. Dan dien je gebruik te maken van DoEvents.

OK Finch,

Dank je wel.

m.vr.gr.,
Jans
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan