Hulp gezocht voor maken van werkrooster (VBA)

Status
Niet open voor verdere reacties.

Cheetahke

Gebruiker
Lid geworden
9 nov 2007
Berichten
28
Hallo,

Ik ben niet vertrouwd met VBA, maar ik zou een werkrooster willen maken die enkele jaren meegaat. Het begin (layout, formules) is al gemaakt, maar dit zou moeten geautomatiseerd worden.
Bij het veranderen van het jaartal, veranderen de weekdagen en ploegen, maar ook de kleuren zouden dan moeten aangepast worden.
Ook zou op tabblad "Jaaroverzicht" gegevens moeten ingevuld worden, bvb op rij 7 (verlof, ziek, enz.). Deze gegevens moeten dan zichtbaar worden in de rij erboven. De verandering wordt dan doorgevoerd naar het tabblad van de betreffende maand.
Er moet ook met kleuren worden gewerkt, zoals in het voorbeeld. De kleuren moeten ook automatisch aangepast worden.
Heeft er iemand enig idee hoe ik dit het beste aanpak? Heb al van alles geprobeerd, maar het lukt me niet!
Ik kan geen bestandje bijvoegen, het is te groot, zelfs als zip-file. Indien je het bestandje wil bekijken, kun je me via MSN contacteren.
Bedankt op voorhand
 
Dat wordt een hele klus wannneer je niet vertrouwd bent met VBA.
Veel zaken die jij wil zijn voor elkaar te krijgen met event(gebeurtenis)macros
bv worksheet_change.
Deze reageert op de verandering in een cel.
Door uit te lezen welke cel het betreft kun je naar de gewenste procedure springen.
Daar regel je dan bv de kleuring van de cel of zet je de waarde in een ander cel, of noem maar op.
De uitgebreide help functie van VBA helpt je eind op weg, maar een boek/cursus is eigenlijk onontbeerlijk.
Sites als ozgrid.com, worksheet.nl helpen je verder, bij wimgielis.be vind je oa tips en veel handige links.
Het uitwerken in het bestand zelf lijkt me een te grote klus voor vrijwilligers werk, maar wie weet vind je iemand, wanneer je het niet zelf wilt doen.
mvg leo
 
Bedankt Leofact voor je snelle reactie.
Het is niet de bedoeling dat iemand anders mijn project gaat maken. Door het zelf te doen leer ik VBA te gebruiken.
Je schrijft : "Door uit te lezen welke cel het betreft kun je naar de gewenste procedure springen". Hoe doe je dit juist?
Ik weet bij Worksheet_change dat je met de target cel kunt werken. Wat moet ik juist doen om in een zelfgemaakte procedure die target cel aan te spreken? Om daar de waarde uit te lezen?
Daar ben ik al een tijdje naar op zoek, maar vind daar geen afdoend antwoord op.
Je spreekt ook over boeken. Welke boeken kun je aanbevelen?
De sites zal ik zeker eens bezoeken.
 
Oké, hartstikke goed.
Even voor de duidelijkheid ik ben geen professional en laten we zeggen enigzins ervaren in VBA.
Ikzelf heb VBA 6 uit de serie ervaring niet vereist van Sybex.
Indertijd toevallig gevonden bij de boekhandel.
Ik persoonlijk heb er wel veel van opgestoken, maar denk zeker dat er betere boeken zijn dat dit.
Ook al omdat het voor alle office applicaties is geschreven(wat ik op zich weer een voordeel vond).
Voordeel vond ik ook, dat het in het nederlands is.
Verder heb ik het handboek VBA van MS dat ooit bij excel, retail werd geleverd(weet niet of dat nog steeds gebeurt)
Wanneer je op deze site VBA6 Excel bij zoeken intypt, krijg je een flinke lijst aantrekkelijke boeken te zien, anders even spitten bij de lokale, goede, boehandel.
De voorbeelden en artikelen op genoemde sites zijn ook erg leerzaam.
Enne.. vragen kun je altijd hier stellen, maar die weg had je al gevonden.
Wat betreft je vraag over de cel waarde dat kun je als volgt doen:
(overal zijn verschillende methodes voor):
Met target.row lees je het rijnummer uit en met target.column het kolom nummer
Deze zet je in een variabele, die gebruik je weer om de inhoud van de veranderde cel uit te lezen:
Code:
vVariable = cells(rRij, rKolom).value
Daar kun je vervolgens weer mee verder werken.
Succes met deze uitdagende klus.
mvg leo
 
Laatst bewerkt:
Wat betreft je vraag over de cel waarde dat kun je als volgt doen:
(overal zijn verschillende methodes voor):
Met target.row lees je het rijnummer uit en met target.column het kolom nummer
Deze zet je in een variabele, die gebruik je weer om de inhoud van de veranderde cel uit te lezen:
Code:
vVariable = cells(rRij, rKolom).value
Daar kun je vervolgens weer mee verder werken.

Leo, je hebt al veel moeite gedaan om dit uit te typen. En alles klopt ook, maar op het einde heb je een gemakkelijkere weg. Het gaat over het uitlezen van de gewijzigde cel, Target dus.

Je kan nl. gewoon verder werken met Target.Value (de inhoud van de gewijzigde cel).

Maar het is wel nuttig voor cheetahke om te weten dat je ook op eenvoudige wijze rij en kolom (en nog veel meer) kan uitlezen.

Over de aan te bevelen boeken. Daar kan ik niets aan bijdragen. Ik heb 1 boek gelezen, maar dat is niet voor beginners en is ook in het Engels.

Voor de rest Cheetahke: veel prutsen, oefenen, geduld niet verliezen, rustig nadenken, creatief zijn, opzoeken op het net (zie Excel links op mijn site die Leo al aanhaalde). De koude wintermaanden komen eraan, dus genoeg mogelijkheden om een mooie applicatie in mekaar te boksen ;) En vragen die niet te uitgebreid zijn, kan je hier stellen :thumb:

Wigi
 
Je kan nl. gewoon verder werken met Target.Value (de inhoud van de gewijzigde cel).
Dat klopt helemaal en korter is beter.
Het laat wel zien hoe row en column werken en daar kun je verder heel interessante dingen mee doen
(maar dat zei je al).
mvg leo
 
Laatst bewerkt:
Bedankt voor de uitleg.
Nu even dit... ik zet dus de waarde van de veranderde cel in een variabele, maar hoe roep ik die variabele aan in een procedure?
vb: public sub VeranderKleur (...)
'hier code
end sub
Moet ik hier tussen de haakjes dan zetten : byval vVariabele as variant?
 
Moet ik hier tussen de haakjes dan zetten : byval vVariabele as variant?
Klopt,
iets dergelijks moet het worden, declaratie (as ..) kan mi achterwege blijven,dat doe je in de sub waar de variabele de waarde krijgt (of een public variabele)
Bij het aanroepen moet je de variabelen noemen dus:
Code:
dim vVariabele as integer
   vVariabele = 55
   Call  veranderkleur(vVariabele)
Hier lees je wat meer
 
Nog een vraagje voor mijn programmaatje... Tot hiertoe lukt het vrijwel aardig, maar nu heb ik nog een probleem.
In cel A1 staat een getal dat een jaartal moet voorstellen. In andere rijen kan een gebruiker ook gegevens invoeren. Als er in de andere rijen iets ingevoerd wordt moet de kleur veranderen, niet als de waarde van de cel A1 wijzigt.
Enig idee?
 
Dat kun je met voorwardelijke opmaak (opmaak->voorwaardelijke opmaak) in het werkblad zelf doen.
Kies voor formule en gebruik de volgende formule om te testen of er gevulde cellen zijn.
=ALS(AANTALARG(bereik)>0;1;0)
Bereik wwordt natuurlijk de range die je testen wilt
kies voor de gewenste opmaak voor wanneer de formule waar is.
mvg leo
 
Laatst bewerkt:
Leo, nogmaals bedankt voor je snelle reactie.
Ik ben echter vergeten te zeggen dat het met voorwaardelijke opmaak niet lukt, omdat in Excel 2003 er maar 3 mogelijkheden zijn. Daarom moet dit in VBA, anders was het geen probleem.
Tot hiertoe lukt het vrij aardig. Als het jaar veranderd worden alle ingevulde waarden verwijderd. Als er in een andere cel iets ingevuld wordt, krijgt dit de overeenstemmende kleur. Als die expliciete waarde terug verwijderd wordt, verdwijnt ook de kleur.
Nog 1 probleempje op te lossen:
Als het jaar veranderd wordt, verdwijnen wel alle ingevulde waarden, maar de kleuren, ingesteld met VeranderKleur(vVariabele), blijven staan. Enig idee hoe ik dit kan oplossen?
Zoals gezegd, kan ik het werkboek hier niet plaatsen omdat het bestand (zelfs gezipt) te groot is, en meerdere zipfiles kunnen spijtig genoeg niet geplaatst worden.
 
Joepie, bijna klaar met projectje. Tot hiertoe lukt alles wat ik wil hebben. Spijtig genoeg duurt het herberekenen van het hele werkboek nog net iets te lang naar mijn zin. Hopelijk vind ik daarvoor ook nog een oplossing.
 
Joepie, bijna klaar met projectje. Tot hiertoe lukt alles wat ik wil hebben. Spijtig genoeg duurt het herberekenen van het hele werkboek nog net iets te lang naar mijn zin. Hopelijk vind ik daarvoor ook nog een oplossing.
Hel mooi
Ik neem aan dat het jaar probleem dan ook is oplost?
 
Inderdaad Leo, het jaarprobleem is ook opgelost. :D
Heb het met volgende code opgelost:
If not intersect(Target, bereik) is nothing then <-- bereik over heel het jaargedeelte
dim rijIndex as integer
dim kolomIndex as integer
If rijIndex = 1 and kolomIndex = 1 then
(hier de code wat er moet gebeuren als het jaartal veranderd)
else
If rijIndex > 5 and kolomIndex > 3
(hier de code wat er moet gebeuren als een andere cel wordt ingevuld)
end if
end if
end if
Er moeten nog wel enkele aanpassingen gebeuren, want ik heb gezien dat ik toch nog iets fout heb gedaan, maar ik weet waar de fout zit.
Ik kende nog niets van VBA, maar ik heb al wel lessen gehad in programmeren (VB.net en Java). Dat heeft me wel voor een groot gedeelte geholpen.
Nogmaals bedankt voor je hulp. Mocht je interesse hebben in het bestandje, geef dan maar een kreet, dan stuur ik het door zodra het klaar is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan