• 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 starten wanneer in een bereik ergens een celopmaak verandert

Status
Niet open voor verdere reacties.
Vervang alle code in ThisWiorkbook eens hiermee:
Code:
Option Explicit
Private sRanges As String
Private cMonitor As ClsMonitorOnupdate
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set cMonitor = Nothing
End Sub
Private Sub Workbook_Open()
  Zetaan ActiveSheet
End Sub
Sub Zetuit()
 Set cMonitor = Nothing
End Sub
Sub Zetaan(sht As Worksheet)
    Select Case sht.Name
        Case "onderhoud": sRanges = "E3:P25"
        Case "Blad2": sRanges = "A2:C4,E4:E8"
        Case Else: Exit Sub
    End Select
     Set cMonitor = New ClsMonitorOnupdate
    Set cMonitor.Range = Sheets(sht.Name).Range(sRanges)
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Zetaan Sh
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Set cMonitor = Nothing
End Sub
 
Gedaan
Van blad "onderhoud" een kopie gemaakt incl. de knoppen om de monitor aan en uit te zetten en sheet de naam "plan" gegeven.
maar krijg foutmeldingen.

1. Bij het activeren van de monitor met knop:
FS-2017-01-19_111420.jpg
met de bijbehorende help:
Het argument is niet optioneel (Fout 449)
Zie ook Bijzonderheden
Het aantal en type van argumenten moeten overeenkomen met het aantal en type die worden verwacht. Voor deze fout zijn de volgende oorzaken en oplossingen mogelijk:
Een onjuist aantal argumenten.
Geef alle noodzakelijke argumenten op. In de functie Left zijn bijvoorbeeld twee argumenten vereist. Het eerste argument geeft aan op welke tekenreeks de bewerking wordt toegepast en het tweede argument geeft aan hoeveel tekens vanaf de linkerkant van de tekenreeks als resultaat worden gegeven. Aangezien geen van beide argumenten optioneel is, moet u ze beide opgeven.
Het weggelaten argument is niet optioneel.
U kunt alleen een argument weglaten uit een oproep naar een door de gebruiker gedefinieerde procedure wanneer het argument bij het declareren van de procedure is gedeclareerd als Optional. U kunt het argument in de oproep opgeven of u kunt de parameter Optional in de definitie declareren.
Selecteer voor aanvullende informatie het desbetreffende item en druk op F1 (in Windows) of op HELP (op de Macintosh).

2. Bij het openen van de andere sheet:
FS-2017-01-19_112153.jpg
 
Punt 1: ik heb nu een argument meegegeven aan de procedure Zetaan. Om deze nu aan een knop te koppelen: (bij Assign macro) 'ThisWorkbook.Zetaan ActiveSheet'

Let op, incl die '

Punt 2: Je hebt een t teveel getypt, het moet zijn : Zetaan Sh
 
De foutmeldingen blijven nu weg, maar 'ThisWorkbook.Zetaan ActiveSheet' verschijnt niet in de lijst van beschikbare macro's. Alleen ThisWorkbook.Zetuit.
Het inschakelen gebeurd wel bij het selecteren van een andere sheet om vervolgens weer de verlaten sheet te activeren.
 
Plak dit:
'ThisWorkbook.Zetaan ActiveSheet'
Gewoon in het venster macro-naam bij het toewijzen van de macro ;)
 
Tjakka !!! Al heel veel bijgeleerd. Wederom hartstikke bedankt :thumb:

(PS.
Ik heb in een andere thread een vraag gesteld hoe Functieargumenten toegevoegd kunnen worden aan een UDF. Ik wilde deze thread daar niet mee "bevuilen".
Het lijkt er op dat die mogelijkheid er niet is)
 
Graag gedaan,
Het lijkt er op dat die mogelijkheid er niet is)[/i]

Die mogelijkheid is er wel, middels Excel-DNA (Google er maar eens op) maar voor de rest sluit ik me volledig aan bij de opmerkingen van de helpers uit dat draadje

++ vwb jouw pm: prima! altijd goed om kennis te delen ;) (kan blijkbaar niet terug reageren per pm)
 
Laatst bewerkt:
Sneller dan verwacht gereed. Veel leer- en werkgenot.
Onnodig te vermelden dat dit niet zonder de geweldige steun van EvR / Eric tot een goed einde was gekomen. :thumb:
 

Bijlagen

Die mogelijkheid is er wel, middels Excel-DNA (Google er maar eens op) maar voor de rest sluit ik me volledig aan bij de opmerkingen van de helpers uit dat draadje

Laat maar zitten, dat gaat boven mijn pet :d :o
 
@Eric,
Met het integreren van de codes in ThisWorkbook en ClsMonitorOnupdate van mijn echt Workbook stuit ik nog op een probleem dat ik na heel wat pogingen niet opgelost krijg.
De foutmelding ontstaat wanneer ik naar sommige tabbladen ga.
FS-2017-01-22_142126.jpg
waarna de help
FS-2017-01-22_142138.jpg

Heb je enig idee waardoor die ontstaan ?

In een andere poging tref ik dit aan:
FS-2017-01-22_180744.jpg
 
Laatst bewerkt:
Die sommige tabbladen... grafiekbladen? Geen echte 'worksheets' ?
 
Yep !

Als test de specifieke grafiekbladen verwijderd maar compileerfout blijft zich melden.
 
Laatst bewerkt:
Die Attribute uit jouw laatste bijlage gewoon verwijderen
de grafieksheets kun je in de procedure zetaan gewoon buitensluiten
 
1. Met uitgeschakelde Attibute .... kon ik weer verder. Voor mijn begrip.. wat wordt met die coderegel bedoeld ?
2. Bij het selecteren van een grafieksheet komt de ZetAan fout weer op.
Door het uitschakelen van
Code:
'Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Zetaan Sh
'End Sub
blijft ook die achterwege. De monitor werkt op de ingestelde sheets, maar ik ben er nog niet achter wat de verdere impact is.

aanvulling: Hoe kan ik de grafieksheets uitsluiten ?
 
Laatst bewerkt:
Punt 1: Die Attributes is een code welke enkel zichtbaar wordt als je een module of Class exporteert en vervolgens opent in een text-editor, het lijkt erop dat je deze tekst vervolgens in de Klasse hebt gekopieerd.
Nu kun je met Attributes oa wat extra omschrijvingen meegeven aan bijv. UDF-jes en aangezien je daar in een ander draadje mee bezig was zal het daar wel vandaan komen.

Punt2 + aanvulling:
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Not TypeOf Sh Is Chart Then Zetaan Sh
End Sub
 
@Eric: Weer alles prima voor elkaar. Dank !
Punt 1: Lijkt er wel op dat dit bij de pogingen is bijgevoegd. Verwijderd.
Punt 2: Code werkt perfect.
 
Ik zelf ben geen fan van berekeningen doen op basis van kleuren. In de database wereld werk je met statussen. Je kan heel eenvoudig een veld toevoegen met de opties prognose en definitief oid. Met de ingebouwde functie SUMIF kan je dan de boel doorrekenen. En hoef je dus helemaal niet moeilijk te doen met allerlei VBA codes.
 
Ik zelf ben geen fan van berekeningen doen op basis van kleuren. In de database wereld werk je met statussen. Je kan heel eenvoudig een veld toevoegen met de opties prognose en definitief oid. Met de ingebouwde functie SUMIF kan je dan de boel doorrekenen. En hoef je dus helemaal niet moeilijk te doen met allerlei VBA codes.

Hi Ginger,
Bedankt voor je opmerking. De functies som.als of sommen.als ken ik en pas die ook vaak toe, maar in dit geval wil ik verandering in celeigenschappen gebruiken.
 
De inhoud van een cel is natuurlijk ook een celeigenschap.
Je licht niet toe waarom je in dit geval geen gebruik wil maken van de suggestie van Ginger.
 
De inhoud van een cel is natuurlijk ook een celeigenschap.
Je licht niet toe waarom je in dit geval geen gebruik wil maken van de suggestie van Ginger.

Blijkbaar zijn er toch wel een aantal belangstellenden voor deze draad ;)
De verklaring is nogal complex maar in het kort:
a. Toegepast voor visualisatie en niet direct voor bindende berekeningen.
b. Prognose cijfers zijn in zwart en als de post gerealiseerd is wordt corrigeer ik indien nodig het getal en maak het rood (=gerealiseerd)
c. Het aantal kolommen wil ik beperkt houden.

Helaas kan ik geen voorbeeld laten zien omdat het om privacygevoelige informatie gaat :(
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan