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

Macro pas volledig laten afdraaien bij bepaalde verplichting

Status
Niet open voor verdere reacties.

groenevinger

Gebruiker
Lid geworden
23 jan 2014
Berichten
5
Ik heb een aantal macro's welke ik in eerste instantie ingang wilde laten zetten zodra een bepaalde combinatie aan voorwaardelijke cellen daarvoor ingevuld waren. (Dit d.m.v. een Worksheet_Change event, iedere macro heeft een andere combinatie aan voorwaardelijke/verplichte cellen en gebruikt/rekent via een ander tabblad, de resultaten worden aan het eind van de macro op het eerste tabblad: wachtformulier geplaatst).

Kennelijk is dat zo eenvoudig nog niet.


Daarom wil ik twee (of alle vijf) van de macro's dan maar aan een knop koppelen.

Echter wil ik dat de macro pas uitgevoerd wordt zodra de combinatie aan voorwaardelijke/verplichte cellen ingevuld zijn, omdat daarmee gerekend wordt, anders komen er verkeerde waardes, nul waardes of #deel/0 in de doelcellen te staan, dit wil ik dan ook voorkomen.

Bijvoorbeeld voor een van de macro's zijn de cellen: "D8:E8,J18:J21" verplicht alvorens de macro in z'n geheel af te kunnen draaien. Ik had gedacht om de waardes in genoemde cellen bijvoorbeeld met elkaar te vermenigvuldigen, als één of meer van de cellen niet ingevuld zijn dan komt er dus 0 uit de vermenigvuldiging.

Dus als het 0 is -niet aan de vereiste voldoet- dan de macro afbreken (exit), maar voordat er een exit plaatsvindt eerst nog een waarschuwende msgbox op het scherm, met daarin een melding en die dan met een "OK" weggeklikt kan worden. Als de wel alle verplichte cellen ingevuld zijn (met waardes hoger dan 0), dan kan de macro volledig afgedraaid worden, zonder msgbox.

Twee van de vijf macro's:

Code:
Sub Macro_Solver_ML8()

Range("Wachtformulier!$H$8").Value = Range("klinkermaling!$C$18").Value
Range("Wachtformulier!$I$8").Value = Range("klinkermaling!$C$19").Value

End Sub

Code:
Sub Macro_Solver_HOC() 

Application.ScreenUpdating = False
Sheets("Solv.HOC").Select
SolverOk SetCell:="$H$14", MaxMinVal:=2, ValueOf:="0", ByChange:="$B$14:$C$14"
SolverSolve (True)
Sheets("Wachtformulier").Select
Range("J27:N27").Select
Application.ScreenUpdating = True
Range("Wachtformulier!$J$11:$L$11").Value = Range("Solv.corr!$J$2:$L$2").Value

End Sub

Of wellicht nog mooier, per cel kijken of de betreffende vereiste cellen ingevuld zijn, dan zou dit het mogelijk maken om wanneer één of meer cellen niet ingevuld zijn deze cellen dan een andere achtergrondkleur te geven. Welke weer wit wordt (als dit mogelijk is) na het wegklikken van de msgbox. Of misschien makkelijker als de macro volledig doorlopen kan worden, aan het eind van de macro de cellen weer een witte achtergrondkleur geven.

Het is helaas geen optie om de vereiste cellen voor alle verschillende berekeningen middels voorwaardelijke opmaak een andere achtergrondkleur te geven indien niet ingevuld, daar de verplichte cellen alleen verplicht zijn wanneer men er een berekening mee doet, het kan zo zijn dat die berekening niet plaatsheeft, maar de cellen dan standaard al een andere achtergrondkleur hebben. Dat is niet de bedoeling.


Ik hoop dat iemand mij wat op weg zou kunnen helpen, om de voorwaardelijke check in de macro te verwerken met een eventuele msgbox. Hoe is dit het beste voor elkaar te krijgen?
 
Laatst bewerkt:
Een mogelijke oplossing staat in het rood:

Code:
Sub Macro_Solver_HOC() 

[COLOR="#FF0000"]If Sheets("Wachtformulier").Range("D8").value*Sheets("Wachtformulier").Range("E8").value* Sheets("Wachtformulier").Range("J18").value*Sheets("Wachtformulier").Range("J21").value=0 then exit sub[/COLOR]
Application.ScreenUpdating = False
Sheets("Solv.HOC").Select
SolverOk SetCell:="$H$14", MaxMinVal:=2, ValueOf:="0", ByChange:="$B$14:$C$14"
SolverSolve (True)
Sheets("Wachtformulier").Select
Range("J27:N27").Select
Application.ScreenUpdating = True
Range("Wachtformulier!$J$11:$L$11").Value = Range("Solv.corr!$J$2:$L$2").Value

End Sub

mvg,
tkint
 
Laatst bewerkt door een moderator:
Bedankt voor je reactie, ik ga 'm uitproberen.

Nog een vraag hierover: zou het ook mogelijk zijn voor de exit van de sub plaats heeft nog een msgbox met een waarschuwing/melding en een OK-knop op het scherm te laten zien? En dat er alleen op OK geklikt kan worden en na deze klik hierop de exit van de sub plaats heeft?
 
Nu met messagebox:

Code:
Sub Macro_Solver_HOC() 

[COLOR="#FF0000"]If Sheets("Wachtformulier").Range("D8").value*Sheets("Wachtformulier").Range("E8").value* Sheets("Wachtformulier").Range("J18").value*Sheets("Wachtformulier").Range("J21").value=0 then 
Msgbox("Er is geen waarde in D8 of E8 of J18 of J21 ingevuld")
exit sub
else[/COLOR]
Application.ScreenUpdating = False
Sheets("Solv.HOC").Select
SolverOk SetCell:="$H$14", MaxMinVal:=2, ValueOf:="0", ByChange:="$B$14:$C$14"
SolverSolve (True)
Sheets("Wachtformulier").Select
Range("J27:N27").Select
Application.ScreenUpdating = True
Range("Wachtformulier!$J$11:$L$11").Value = Range("Solv.corr!$J$2:$L$2").Value
[COLOR="#FF0000"]end if[/COLOR]

End Sub
mvg,
tkint
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan