Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Formulier voor macro's  (gelezen 8157 keer)

0 leden en 1 gast bekijken dit topic.

Offline EricV

  • Volledig lid
  • **
  • Berichten: 138
  • Oplossing.be
Formulier voor macro's
« Gepost op: 15 juli 2005, 16:38:41 »
Goedemiddag,

Ik ben al lang aan het zoeken hoe ik het volgende probleem moet oplossen, maar helaas ben ik nog geen meter verder gekomen. Heb gezocht in Excel via de Help-functie maar nog geen resultaat.
Misschien dat iemand van jullie kan helpen.
Nu het probleem:

In een werkmap heb ik meerdere kleine eenvoudige macro's gemaakt, zoals Invoer Maandag, Invoer Dinsdag .....t/m Invoer Zondag, Afdrukken Maandag, Afdrukken Dinsdag.........t/m Afdrukken Zondag.

Wat ik nu graag wil is dat ik aan de hand van een keuzemenu o.i.d. kan bepalen welke macro ik wil uitvoeren. Ik wil dit menu niet hebben op een werkbalk maar in een apart werkblad van deze werkmap die ik ga noemen "Hoofdmenu".
Van een kennis heb ik gehoord dat ik eerst een formulier moet aanmaken en daarna via Beeld, werkbalken, Formulier kan kiezen voor bv. selectievakjes, invoervakken enz. toevoegen wat nodig is.
Hij weet echter niet hoe dit moet. Is er iemand van jullie die mij aub. zo gedetailleerd mogelijk uit kan leggen wat ik moet doen, evt. met een voorbeeldbestandje erbij.

Alvast bedankt voor al jullie moeite.

M.vr.gr.
Eric
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:Formulier voor macro's
« Reactie #1 Gepost op: 15 juli 2005, 17:57:21 »
Dag Eric,

Ga je die eenvoudige macro's zelf oplijsten in die sheet "Hoofdmenu", of moet dat ook nog geautomatisserd worden (maakt het wel veeeeeeeeeeeeel moeilijker). Upload anders eens een voorbeeld van wat je wil, dat is makkelijker...

Bart
WinXP - Excel 2000/XP/2003

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #2 Gepost op: 15 juli 2005, 19:13:44 »
Hallo,

Ik zou volgende doen :

Klik rechts in de menubalk en vink de werkbalk "Visual Basic" aan. Nu krijg je een extra werkbalk.

Ga naar het werkblad "Hoofdmenu".

Kies in de extra werkbalk het icoontje met de hamer (werkset). Kies de "opdrachtknop" (klein rechthoekje) en plaats het op de gewenste plaats op het werkblad "hoofdmenu".  Klik rechts op de knop en kies "eigenschappen.  Bij "Caption" kan je nu de tekst aanpassen die je op de knop wenst te zien.

Dubbelklik op de knop, hierdoor wordt VBA opgestart en krijg je een scherm met volgende code :

Private Sub CommandButton1_Click()

End Sub

Vul op de lege rij de naam van de gewenste macro in.

Voeg op zelfde wijze eventueel nog andere knoppen toe.

Sluit VBA opnieuw af (kruisje rechtsboven).

Op die extra gecreëerde werkbalk zie je nog een icoontje met een liniaal en driehoek die normaal actief zou moeten zijn, zet deze op non-actief.

Als je nu op een van die knoppen drukt zou hij de achterliggende macro moeten uitvoeren.

Ik persoonlijk zou wel opteren voor een andere oplossing dan allemaal knoppen toe te voegen op je werkblad ik zal dit in een volgend bericht uit de doeken doen om het overzicht een beetje te bewaren.

groetjes

 
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #3 Gepost op: 15 juli 2005, 20:10:20 »
Persoonlijk zou ik volgende situatie creëren : plaats 1 knop op het werkblad die een formuliertje oproept met meerdere knoppen. Hiervoor moet je wel opnieuw gebruik maken van VBA (Visual Basic for Application).  Ik zal dit stap voor stap proberen uit te leggen in de veronderstelling dat je nog niets van VBA afweet.

Geen paniek als je denkt dat je geen VBA hebt, want dit zit standaard in Excel.

Neem, als veiligheid, eerst een kopietje van het bestand waarin je zal werken.

Open het bestand en kies een plaats waar je de knop wenst te plaatsen die het formulier oproept.

Kies in de werkbalk "Visual Basic" de knop "werkset" (indien werkbalk niet aanwezig is moet je rechts klikken in de zichtbare werkbalken en Visual Basic aanvinken).

Kies in de werkset de "opdrachtknop" (1x links klikken) en plaats ze op de gewenste plaats (1x links klikken).

Dubbelklik op de zonet geplaatste knop en nu wordt VBA opgestart.

Nu gaan we eerst de tekst wijzigen die op die knop komt. Dit kan bij het venster eigenschappen.  Indien dit venster niet zichtbaar is druk je "F4" of kies je in het menu "Beeld" de optie "Venster Eigenschappen". Tussen al de eigenschappen zie je "Caption" staan, hiernaast typ je de tekst die je op de knop wenst te zien (bv. roep formulier op).

In het hoofdvenster zie je volgende code staan :

Private Sub CommandButton1_Click()

End Sub

Hiertussen wordt de code geplaatst die moet gebeuren als er op de knop geklikt wordt.

Typ hiertussen de code :

userform1.show

Deze code roept het formulier userform1 op. We moeten nu wel nog dit formulier aanmaken :

Kies in het menu "Invoegen" de keuze "UserForm".

Nu verschijnt er een grijs werkvlakje met als naam UserForm1. Eveneens verschijnt er een werkset met verschillende knoppen.  De grote van het formulier kan je aanpassen met de vierkantjes aan de rand van het formulier.

Plaats nu het gewenste aantal knoppen op het formulier via de werkset :

Klik op de "opdrachtknop" in de werkset en bepaal de plaats waar ze moet komen op het formulier.  Bij de eigenschap "Caption" kan je opnieuw de tekst aanpassen die moet verschijnen op de knop (bv. Maandag, Dinsdag, ...).

Als het gewenste aantal knoppen is geplaatst moeten we nu nog de desbetreffende macro aan de knop linken :

Dubbelklik op de eeste knop en nu verschijnt de code die achter deze knop zit :

Private Sub CommandButton1_Click()

End Sub

Plaats hiertussen de naam van de macro die uitgevoerd moet worden als je op deze knop drukt.

Indien je de naam niet juist weet doe je het volgende : kijk in de projectverkenner (dit is een venstertje met enkele mappen in zoals Formulieren en Modules). Indien dit venster niet zichtbaar is druk dan Ctrl+R of kies in het menu "Beeld" de optie "projectverkenner".

Kijk onder het mapje "Modules" daar staat er "Module1". Dubbelklik hierop en nu verschijnt een nieuw venster met de opgenomen macro's erin (eventueel kunnen er nog andere Modules staan, in het mapje Modules, waarin er macro's staan). De naam van de macro zie je telkens staan tussen Sub en ()

Bv. de Maco met naam Test ziet er als volgt uit :

Sub Test()
Hier komt er code
End sub

Om nu terug te keren naar het formulier met je knoppen dubbelklik je in de projectverkenner op "UserForm1" in het mapje "Formulieren".

Dubbelklik nu op de eerste knop en vul de naam van de macro in, in het voorbeeld met de macronaam Test, heeft dit volgende code :

Private Sub CommandButton1_Click()
Test
End Sub

Als je wenst dat het formulier wordt afgesloten als je op een knop hebt gedrukt dan voeg je de volgende code toe :

unload me

In het voorbeeld :

Private Sub CommandButton1_Click()
Test
Unload Me
End Sub

Dit is enkel handig als je steeds maar één macro uitvoert.

Eventueel kan je ook een knop toevoegen met enkel deze code. Als je dan op deze knop drukt wordt het formulier uit het geheugen gezet.

Keer terug naar het formulier(dubbelklik op UserForm1 in de projectverkenner) en ken op zelfde wijze de desbetreffende macro's toe aan de andere knoppen.

Als alle knoppen en macro's aan elkaar toegewezen zijn kan je VBA afsluiten.

Zet de ontwerpmodus uit (in de VBA-werkbalk, het icoontje met lat, driehoek en potlood).

Als je nu op de knop in het werkblad klikt zou het gemaakte formulier moeten verschijnen. Als je nu op een van de knoppen klikt zou de bijhorende code (macro) moeten uitgevoerd worden.

Indien je iets niet begrijpt of als er iets niet lukt moet je maar iets laten weten.

Veel succes.
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:Formulier voor macro's
« Reactie #4 Gepost op: 16 juli 2005, 08:31:06 »
Ik zou persoonlijk niet werken met een command knop per macro, dan wordt je userform algauw onoverzichtelijk.

Als je inderdaad met een echte userform zou werken (hoeft niet, want er zijn andere oplossingen die misschien meer geschikt zijn voor beginnende VBA'ers), zou ik een combobox kiezen...

Bart
WinXP - Excel 2000/XP/2003

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #5 Gepost op: 16 juli 2005, 19:18:36 »
Een Combobox of listbox is voor grotere hoeveelheden inderdaad geschikter, maar ik denk dat dit voor een leek of beginnende VBA'ers iets moeilijker te verstaan is.

Naar ik uit EricV zijn probleem heb kunnen uitmaken zal hij "slechts" 14 knoppen nodig hebben, per dag 1 voor invoer en 1 voor afdruk.

Waarschijnlijk zullen er wel nog andere oplossingen zijn die ook wel beter en/of handiger zijn, maar daarvoor kan het wel nuttig zijn als we een voorbeeldbestandje zouden hebben met wat er juist moet gebeuren.

Groetjes
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline barthold

  • Volledig lid
  • **
  • Berichten: 171
  • ExWorks.be: Free Excel tools.
Re:Formulier voor macro's
« Reactie #6 Gepost op: 17 juli 2005, 09:32:30 »
Inderdaad, een voorbeeld zou wel handig zijn, maar is deze vraag nog wel actueel...

Ik vermoed dat Eric op verlof is ofwel zijn probleem zelf al opgelost heeft ;-)
WinXP - Excel 2000/XP/2003

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #7 Gepost op: 17 juli 2005, 18:49:15 »
We zullen wat geduld moeten hebben  ;D

"tijd brengt raad" zeggen ze  :P

groeten
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline EricV

  • Volledig lid
  • **
  • Berichten: 138
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #8 Gepost op: 18 juli 2005, 12:17:47 »
Iedereen die op mijn vraag heeft gereageerd bedankt voor alle moeite. Met de methode van Buks heb ik het voor elkaar gekregen wat ik wilde. Het werkt perfect !

Toch heb ik nog enkele aanvullende vraagjes.
1. Formulier heb ik genoemd "Formulier oproepen". Deze tekst staat in de knop in mijn werkblad. Kan ik deze tekst eventueel ook nog wijzigen ? Zo ja, hoe ?
2. Kan de opmaak van het formulier ook nog mooier gemaakt worden mbv. kleuren en / of andere lettertypes ?

Ook heeft Barthold gereageerd en hij stelde voor om te werken met een Combobox, maar dit zou wel wat moeilijker zijn. Maar omdat ik erg graag zoveel mogelijk hierover wil leren zou ik toch graag willen weten hoe dit werkt.
Ik ben benieuwd.

M.vr.gr.
Eric
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #9 Gepost op: 18 juli 2005, 16:05:34 »
Hallo,

Antwoorden op aanvullende vragen :

1. Het eenvoudigste is als je de werkbalk VBA opnieuw zichtbaar maakt en daar het icoontje met potlood/lat/driehoek (ontwerpmodus) aanzet en dan rechts klikken op de knop en "Eigenschappen" kiezen.  Daar kan je dan tekst wijzigen (en kleuren). Nadien wel opnieuw knop "ontwerpmodus" uit zetten.

2. Ga hiervoor in VBA (Alt-F11) en ga naar je Userform. Daar kan je ook opnieuw alle eigenschappen aanpassen qua kleuren, tekst, lettertypes, ... Je moet er wel rekening mee houden dat je eerst alle knoppen selecteerd als je ze allemaal wenst te wijzigen van lettertype.

Het kan ook zeer leerzaam zijn om eens een kopie te nemen van je bestand en daar dan de andere eigenschappen te overlopen en eventueel iets te wijzigen, zo zie je al vlug wat elke eigenschap betekend.  Als je dan per ongeluk opslaat kan het geen kwaad vermits het toch een kopie is.

Wat die combobox zal ik hier later nog een voorbeeldje plaatsen, want vandaag zal ik geen tijd meer hebben.

groetjes.
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

Offline buks

  • Ervaren lid
  • ***
  • Berichten: 313
  • Oplossing.be
Re:Formulier voor macro's
« Reactie #10 Gepost op: 23 juli 2005, 11:42:45 »
Hier ben ik dan met een voorbeeld van een combobox :

Start een nieuw bestand op (later kan je dit dan toepassen in andere bestanden) en druk Alt-F11 (opstarten VBA).  Kies in het menu invoegen Userform.  Plaats via de werkset een combobox op het formulier (het 4e icoontje - keuzelijst met invoervak). Eventueel kan je ook een listbox plaatsen. Dit is een keuzelijst zonder invoervak, maar de werkwijze blijft hetzelfde.

We plaatsen nu ook nog een CommandButton (opdrachtknop) op het formulier.

Het formulier is nu reeds opgemaakt (de definitieve opmaak kan je later doen als alles goed werkt) en nu gaan we over naar het plaatsen van code.

We zullen het formulier oproepen via een opdrachtknop in het excel werkblad : ga naar excel en plaats met behulp van de werkset (via werkbalk Visual Basic) een CommandButton (opdrachtknop) ergens in het werkblad.  Dubbelklik op de CommandButton en je komt opnieuw in VBA terecht met volgende code :

Private Sub CommandButton1_Click()

End Sub

om het formulier op te roepen indien we op de knop klikken vullen we dit aan tot (vul de code in in kleine letters, de hoofdletters worden vanzelf geplaatst en zo zie je ook of je geen fouten getypt hebt) :

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Klik nu in de projectverkenner (eventueel zichtbaar maken via menu Beeld) dubbel op UserForm1 en het formulier wordt zichtbaar. Dubbelklik nu op het formulier zodat het venster verschijnt om de code toe te voegen.

We moeten er nu voor zorgen dat indien het formulier wordt opgestart er de nodige keuzes verschijnen in de ComboBox. Dit doen we op volgende wijze :

Boven het venster waar je de code plaatst staan er 2 keuzelijsten. De linkse betreft de objecten die reeds aanwezig zijn (van het geselecteerde UserForm) en de rechtse bevat de mogelijke procedures op het geselecteerde object.  Nu zien we nog staan Userform en Click.  Dit betekend dat hier de code komt als de gebruiker klikt (procedure) op het formulier (object). Wij hebben dit nu niet nodig.

Wij willen voordat het formulier zichtbaar wordt dat de keuzes in de ComboBox vermeld staan. Hiervoor kiezen we bij het object UserForm de procedure Initialize (rechter invoervak) en krijgen nu volgende :

Private Sub UserForm_Initialize()

End Sub

Dit vullen we aan tot :

Private Sub UserForm_Initialize()
ComboBox1.AddItem "maandag"
ComboBox1.AddItem "dinsdag"
ComboBox1.AddItem "woensdag"
ComboBox1.AddItem "donderdag"
ComboBox1.AddItem "vrijdag"
End Sub

Wat gebeurt er nu : bij het initializeren (oproepen van formulier) worden maandag, dinsdag, woensdag, donderdag en vrijdag toegevoegd in de ComboBox.

Sla het bestandje al eens op en ga nu naar Excel en klik op de CommandButton die op je werkblad staat.  Nu zou het formulier moeten verschijnen met in de ComboBox de mogelijke keuzes.

Nu moeten we nog bepalen wat er moet gebeuren bij de gemaakte keuze (dus als we op de knop klikken die op het formulier staat).  

Sluit het formulier af en ga in VBA opnieuw naar het UserForm en dubbelklik op de CommandButton. Wijzig de eigenschap Caption naar OK zodat je deze tekst ziet verschijnen op de knop.

Volgende code vullen we nu verder aan :

Private Sub CommandButton1_Click()

End Sub

tot :

Private Sub CommandButton1_Click()
MsgBox ComboBox1.value
End Sub

Sla het bestand op en ga naar excel en klik op de CommandButton op het werkblad. Nu wordt het formulier opgeroepen, kan je je keuze maken in de ComboBox en als je op de OK-knop drukt dan verschijnt er een berichtvenster (msgbox) met de waarde (value) die is aangevinkt in de ComboBox.

Op de plaats waar nu het berichtvenster (msgbox) werd ingegeven kan je dan de naam van de gewenste macro plaatsen indien een bepaalde keuze werd geselecteerd.

Deze keuze kan je dan overlopen, naargelang wat je precies kan ingeven in de ComboBox, via een If-structuur of een Case-structuur.  Hiervan kan je ook voorbeelden vinden in de help van VBA (is niet dezelfde help als in Excel).  Om deze help op te roepen kan je gewoon if of case in je code typen en met de cursor in het woord staan en dan op F1 drukken.  Nu zal de help verschijnen betreffende dit woord.

Als je wenst dat het formulier afgesloten wordt als je op de OK-knop hebt gedrukt dan plaats je volgende regel erbij (in vet gedrukt) :

Private Sub CommandButton1_Click()
MsgBox ComboBox1.value
Unload Me
End Sub

Zo zie je hoe je met een ComboBox kan werken.  

Hopelijk is het een beetje verstaanbaar, indien er iets niet duidelijk is moet je het maar vragen.

Groeten
Win 7 Home - Intel Core i3 CPU 550 @ 3.20GHz - Basicnet XL - IE 9 - MS Office 2010 - Norton Internet Security 2012

 


www.combell.com