makro opstarten als waarde van een cel verandert

Bespreek het rekenblad

makro opstarten als waarde van een cel verandert

Berichtdoor coiske60 » do okt 22, 2009 11:37 pm

hallo iedereen,

bij een vraag (beginnersforum) hoe ik een automatisch ingevulde datum kon behouden als ik later dat rekenblad weer opende, kwam ik op een nieuw probleem: hoe start ik een makro tengevolge een waardeverandering in een cel (bv. een lege cel die ingevuld wordt). Die verandering kan ik opvangen met een "If"-functie, maar deze zou het opstarten van een makro moeten veroorzaken.

bedankt bij voorbaat

francois
Open Office 3 - Windows NT
coiske60
 
Berichten: 6
Geregistreerd op: wo okt 14, 2009 10:18 pm

Re: makro opstarten als waarde van een cel verandert

Berichtdoor GerardV » vr okt 23, 2009 8:57 am

Dit zou je kunnen doen door een functie te maken, maar daarmee is je probleem niet verholpen. De functie kan wel een macro starten, maar de macro kan dan geen waarden op je werkblad schrijven volgens mij....
De functie creëer je iets in de geest van :
Code: Selecteer alles   UitklappenInklappen
Function StartJeMacro()
   Macronaam
End Function


In het werkblad zet je vervolgens in een andere cel (bijvoorbeeld $B$1) de formule:
=ALS($A$1="";"";STARTJEMACRO())
$A$1 de cel is waar je je iets moet invoeren om de macro te starten.

Je macro wordt wel gestart maar zal vermoedelijk geen waarden op je sheet veranderen (zet er anders een Print "Test" regel in je macro om te conformeren of de macro wordt aangeroepen.
Enige manier om een waarde terug te krijgen is de waarde aan je functie toe te kennen, maar deze wordt vervolgens weer iedere keer berekend, zoals ik al eerder stelde..

Gerard
OpenOffice 3.1 op Windows Vista
Nog niet gehinderd door enige vorm van kennis....
GerardV
 
Berichten: 65
Geregistreerd op: za sep 12, 2009 10:20 pm
Woonplaats: Nederland

Re: makro opstarten als waarde van een cel verandert

Berichtdoor coiske60 » zo nov 01, 2009 12:28 am

hallo gerard v

ik heb gedaan zoals je schreef:

mijn functie:

rem ----------------------------------------------------------------------
function STARTMACRO()
date_today3
end function
rem ----------------------------------------------------------------------

mijn macro:(1- vult datum in met NOW()
2- copy deze cel
3- paste special deze waarde als datum


sub date_today3
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "=NOW()"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(5) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Flags"
args3(0).Value = "D"
args3(1).Name = "FormulaCommand"
args3(1).Value = 0
args3(2).Name = "SkipEmptyCells"
args3(2).Value = false
args3(3).Name = "Transpose"
args3(3).Value = false
args3(4).Name = "AsLink"
args3(4).Value = false
args3(5).Name = "MoveMode"
args3(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args3())


end sub


de macro werkt als hij door de functie "startmacro" opgeroepen wordt: de datum van vandaag verschijnt als waarde in de cel. Ik start de functie "STARTMACRO" dan op met Run macro.

maar als ik (in cel B1271) de functie =IF(C1271="";"";STARTMACRO()) oproep (door iets in cel C1271 te schrijven en op "enter " te duwen), dan verschijnt de message : "Protected cells can not be modified", het programma blokkeert en ik moet het bericht 2 keer bevestigen vooraleer de cursor in de cel eronder verschijnt en het programma weer werkt.

Is het dat wat je bedoelt als je zegt dat de macro waarschijnlijk geen waarden zal invullen?

Om te beletten dat de macro (indien ik hem kan opstarten) meer dan één maal opgeroepen wordt zou ik de voorwaarde van de IF kunnen veranderen:

IF B1271 <>"" and C1271 = "" ;"";STARTMACRO()). (daardoor zal de macro s'anderendaags niet meer opstarten)

Maar moet die "AND" dan ook niet tussen haakjes staan? Hoe is de schrijfwijze dan precies?

In ieder geval al bedankt voor het begin van de oplossing

François
Open Office 3 - Windows NT
coiske60
 
Berichten: 6
Geregistreerd op: wo okt 14, 2009 10:18 pm

Re: makro opstarten als waarde van een cel verandert

Berichtdoor GerardV » zo nov 01, 2009 1:17 pm

maar als ik (in cel B1271) de functie =IF(C1271="";"";STARTMACRO()) oproep (door iets in cel C1271 te schrijven en op "enter " te duwen), dan verschijnt de message : "Protected cells can not be modified",

De cel waar een waarde veranderd wordt is beveiligd. Als je in een macro iets in een cel wilt schrijven, dan mag deze niet beveiligd zijn. Je zult dus de beveiliging in de macro op moeten heffen en nadat je de waarde hebt aangepast de beveiliging weer aan moeten zetten.

Is het dat wat je bedoelt als je zegt dat de macro waarschijnlijk geen waarden zal invullen?

Ja, dat is wat ik bedoelde. Zou zo 123 niet weten hoe dit wel voor elkaar te krijgen met de methode die jij voor ogen hebt. Om deze reden melde ik dat het wel mogelijk ik om voor het afsluiten, printen, activeren, opslaan van het document een macro uit te voeren die de datum in de cellen plaatst waar je data hebt toegevoegd. Je kunt één van de gebeurtenissen of meerdere van de gebeurtenissen gebruiken om je macro te starten.

Gerard
OpenOffice 3.1 op Windows Vista
Nog niet gehinderd door enige vorm van kennis....
GerardV
 
Berichten: 65
Geregistreerd op: za sep 12, 2009 10:20 pm
Woonplaats: Nederland


Keer terug naar Calc

Wie is er online

Gebruikers op dit forum: Google [Bot] en 1 gast