[OPGELOST] Knipperend beeldscherm bij uitvoeren macro, Calc

Nick1980
Berichten: 12
Lid geworden op: vr okt 12, 2012 3:34 pm

[OPGELOST] Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door Nick1980 »

Ik heb onlangs diverse macros opgesteld en als ik deze dan uitvoer knippert het beeldscherm bij elke bewerking.
Dit kan je uitschakelen door een stukje code, iets dat lijk op [ Application.ScreenUpdating = False / True ] zowel aan het begin als aan het einde.

De macro heeft de functie dat er bepaalde cellen worden gewist en in sommige een bepaalde tekst/cijfer word genoteerd.

Maar in mijn macro werkt dat niet helemaal :(
Ik heb de code al op allerlei plekken geprobeerd te plaatsen.

Wellicht zijn er nog ander tips om de macro wat efficenter te maken.....

Code: Selecteer alles

sub S_en_O_Wissen
Application.ScreenUpdating = False
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 = "ToPoint"
args1(0).Value = "$K$11"

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

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$I$11"

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

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$D$11"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$B$11"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Flags"
args8(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$K$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "Flags"
args10(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args10())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "ToPoint"
args11(0).Value = "$I$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "Flags"
args12(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$D$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "Flags"
args14(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args14())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$B$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "Flags"
args16(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args16())

rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "ToPoint"
args17(0).Value = "$K$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args17())

rem ----------------------------------------------------------------------
dim args18(0) as new com.sun.star.beans.PropertyValue
args18(0).Name = "Flags"
args18(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args18())

rem ----------------------------------------------------------------------
dim args19(0) as new com.sun.star.beans.PropertyValue
args19(0).Name = "ToPoint"
args19(0).Value = "$I$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args19())

rem ----------------------------------------------------------------------
dim args20(0) as new com.sun.star.beans.PropertyValue
args20(0).Name = "Flags"
args20(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args20())

rem ----------------------------------------------------------------------
dim args21(0) as new com.sun.star.beans.PropertyValue
args21(0).Name = "ToPoint"
args21(0).Value = "$D$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args21())

rem ----------------------------------------------------------------------
dim args22(0) as new com.sun.star.beans.PropertyValue
args22(0).Name = "Flags"
args22(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args22())

rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "ToPoint"
args23(0).Value = "$B$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args23())

rem ----------------------------------------------------------------------
dim args24(0) as new com.sun.star.beans.PropertyValue
args24(0).Name = "Flags"
args24(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args24())

rem ----------------------------------------------------------------------
dim args25(0) as new com.sun.star.beans.PropertyValue
args25(0).Name = "ToPoint"
args25(0).Value = "$K$5"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args25())

rem ----------------------------------------------------------------------
dim args26(0) as new com.sun.star.beans.PropertyValue
args26(0).Name = "Flags"
args26(0).Value = "SVDFN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args26())

rem ----------------------------------------------------------------------
dim args27(0) as new com.sun.star.beans.PropertyValue
args27(0).Name = "ToPoint"
args27(0).Value = "$B$5"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args27())

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

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

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

Application.ScreenUpdating = True
end sub
Laatst gewijzigd door Nick1980 op wo apr 29, 2015 5:21 pm, 1 keer totaal gewijzigd.
OpenOffice 4.3.1 op Windows 7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door RPG »

Hallo

Ik denk dat je het probleem kun oplossen met
LockController en UnlockControllers. Gebruik deze twee methoden altijd in paren anders word je beeld bevroren. Probeer ook een oplossing te vinden in het geval er een fout ontstaat want dan blijft je scherm bevroren.

http://www.openoffice.org/api/docs/comm ... ontrollers
In boven staande link staat meer informatie.

Over het efficienter maken van deze macro heb ik geen idee. Mijn idee is eerder dat je zulke macro's moet zien te voorkomen. Ik heb het idee dat zulke macros ontstaan op het moment dat het tonen van de gegevens en de gegevens zelf in het zelfde werkblad staan. Ik ben zelf ook zo begonnen. Mijn aanbeveling is om de gegevens los proberen te koppelen van hoe de gegevens getoond moeten worden.

Romke

Code: Selecteer alles

sub proef
	ThisComponent.lockControllers
	overige code
	ThisComponent.unlockControllers
end sub
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Nick1980
Berichten: 12
Lid geworden op: vr okt 12, 2012 3:34 pm

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door Nick1980 »

Romke tnx [ ThisComponent.lockControllers ] werkt !


Over het efficenter maken van de macro.....
Wat ik wil is dat een macro diverse cellen leeg maakt zodat ik die weer opnieuw kan vullen met info....

Als ik nu bij voorbeeld 1 cel wil toevoegen aan de macro is dat een hele tour....

Kan zo macro niet korter / duidelijker / efficenter worden genoteerd is eigenlijk mijn vraag...
OpenOffice 4.3.1 op Windows 7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door RPG »

Hallo
Nick1980 schreef:Als ik nu bij voorbeeld 1 cel wil toevoegen aan de macro is dat een hele tour....
Dit is precies de reden waarom ik macro ontraad aan mensen die beginnen met OOo.
Nick1980 schreef:Kan zo macro niet korter / duidelijker / efficiënter worden genoteerd is eigenlijk mijn vraag..
Ik heb het idee dat de macro beslist korter moet kunnen maar ik heb nu nog geen idee.

Nadere uitleg waarom ik macro's ontraad. Mijn persoonlijke ervaring en ook wat ik zie op het forum is dat vaak begonnen wordt met macros zonder te weten hoe een goede oplossing te bereiken. Mijn advies is altijd om zo goed mogelijk alle mogelijkheden te benutten die er zijn in het programma wat gebruikt wordt. Zeker OOo is een goed pakket en er kan veel gedaan worden als men de details kent.

Al de tijd de besteed wordt aan macro's kun je niet besteden aan het leren kennen van de gewonen mogelijkheden. Daar komt bij dat er in OOo twee soorten macro's zijn die overigens nit strikt te scheiden zijn.

Je heb macro's die gebruik maken van de dipatcher en ook macro's die alleen gebruik maken van de API. Ze kunnen wel goed gemixet worden. De macro's die gebruik maakt van de dispacher liggen ook kort bij wat er mogelijk is met het normaal gebruik van OOo.

In een normaal gebruik van OOo is het goed om gebruik te maken van namen. Namen kunnen op verschillende manieren gebruikt worden.
Er zijn drie begin punten
a) Menu --> Invoegen -->Namen
b) Menu --> Gegevens --> Bereiken(Ranges)
c) Vanuit de databronnen gegevens slepen naar een werkblad.


De namen kunnen op verschillen manieren gebruik worden in functies. Er is wel een groot verschil in het gebruik van een Naam en wat heet een bereik.

Om terug te komen op de feitelijke vraag. Deze namen kun je ook gebruiken de opgenomen macro's. Het is mij niet gelukt om een naam rechtstreeks in t e voegen. Maar als ik een macro opnam dan was de macro later aan te passen met de hand. Het nog sterker vereenvoudigen van macros kan wel maar dan moet je ook een goede kennis krijgen van BASIC en ik denk dat je dan verder afraak van wat eenvoudig mogelijk is met OOo.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door RPG »

Hallo

Ik heb enige tijd gezocht naar iets wat zou kunnen helpen. Helaas heb ik niets te bieden. Wel kan ik enige links aanbieden die je mogelijk helpen.

http://forum.openoffice.org/nl/forum/vi ... amen#p7294

http://forum.openoffice.org/nl/forum/vi ... amen#p6879
Erger je niet aan de wat harde toon in bovenstaande link.

http://forum.openoffice.org/nl/forum/vi ... amen#p5478
http://forum.openoffice.org/nl/forum/vi ... amen#p5478
http://forum.openoffice.org/nl/forum/vi ... amen#p2474

In alle gevallen is het doel de uitleg die eremmel geeft over het gebruik van namen.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Nick1980
Berichten: 12
Lid geworden op: vr okt 12, 2012 3:34 pm

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door Nick1980 »

Romke tnx voor de tips.....
Ik ben dan misschien niet heel ervaren met calc, maar ik ben er inmiddels inderdaad ook achter dat je macro's moet vermijden.

Maar sommige zaken zijn lastig zonder een macro..... zoals het wissen van bepaalde cellen. Zoals ik in vorige posts heb aan gehaald.

Het hele verhaal van 'namen en bereiken' is ook interessant ga ik op andere vlakken toepassen. En kijken of het ook valt in te passen in een macro

Ik hoe iedereen hier op de hoogte....

gr Nick
OpenOffice 4.3.1 op Windows 7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door RPG »

Hallo

In het geval je Engels kunt lezen dan is het raadzaam om het Engelse forum te lezen. Daar worden zeer frequent goede adviezen gegeven. Ook al lees je alleen maar alles wat daar gepost wordt. Je leert vaak ook nog andere zaken die voor ieder verschillend zijn.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Gebruikersavatar
DiGro
Berichten: 86
Lid geworden op: wo mei 13, 2009 4:57 pm
Locatie: Hoorn NH

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door DiGro »

En dan hier nog maar even een meer effectievere vorm in AOO BASIC van dezelfde macro:

De in de uitgebreidere macro genoemde waarden 'SVDFN' zijn de hieronder vermelde waarden in
de macro van AOO BASIC:

1 = VALUE (waarde)
2 = DATETIME (datum-tijd)
4 = STRING (tekenreeks)
8 = ANNOTATION (notitie)
16 = FORMULA (formule)

Die waarden mogen bij elkaar opgeteld worden zodat achter 'çlearcontents' 31 mag worden vermeld
om alle bovenstaande waarden uit de betreffende cellen te verwijderen.

Code: Selecteer alles

sub S_en_O_Wissen

ThisComponent.lockControllers

with thiscomponent.sheets(0) 'dit is Blad1 (nummering begint met 0)
	.getcellrangebyname("B7").clearcontents(31) '31 is de som van mogelijke waarden om de inhoud te wissen:
	.getcellrangebyname("B9").clearcontents(31) ' 1 = VALUE      (waarde)
	.getcellrangebyname("B11").clearcontents(31)' 2 = DATETIME   (datum-tijd)
	.getcellrangebyname("D7").clearcontents(31) ' 4 = STRING     (tekenreeks)
	.getcellrangebyname("D9").clearcontents(31) ' 8 = ANNOTATION (notitie)
	.getcellrangebyname("D11").clearcontents(31)'16 = FORMULA    (formule)
	.getcellrangebyname("I7").clearcontents(31)
	.getcellrangebyname("I9").clearcontents(31)
	.getcellrangebyname("I11").clearcontents(31)
	.getcellrangebyname("K5").clearcontents(31)
	.getcellrangebyname("K7").clearcontents(31)
	.getcellrangebyname("K9").clearcontents(31)
	.getcellrangebyname("K11").clearcontents(31)
        .getcellrangebyname("B5").setValue("1")
end with
	
ThisComponent.unlockControllers

End Sub
Laatst gewijzigd door DiGro op vr jan 03, 2014 2:52 pm, 1 keer totaal gewijzigd.
DiGro

----------------------------------------------------
Windows 11 en AOO 4.1.15
Gescand door Ziggo Safe Online (F-Secure)
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door eremmel »

Macro programmeren begint met het kennen van de functies en dan met het 'hand' maken van het script (resultaat van DiGro).
Een macro recording is meestal niet geschikt voor het editen/uitbreiden van een macro zoals te zien is in de eerste macro.
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Nick1980
Berichten: 12
Lid geworden op: vr okt 12, 2012 3:34 pm

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door Nick1980 »

Tnx voor het antwoord hier heb ik echt wel wat aan, ik heb mn worksheet hierdoor weer weten te verbeteren.

Nog een vraagje mbt dit verhaal, hoe kun je na het eind van de macro terug keren naar een bepaalde cel ?
DiGro schreef:En dan hier nog maar even een meer effectievere vorm in AOO BASIC van dezelfde macro:

De in de uitgebreidere macro genoemde waarden 'SVDFN' zijn de hieronder vermelde waarden in
de macro van AOO BASIC:

1 = VALUE (waarde)
2 = DATETIME (datum-tijd)
4 = STRING (tekenreeks)
8 = ANNOTATION (notitie)
16 = FORMULA (formule)

Die waarden mogen bij elkaar opgeteld worden zodat achter 'çlearcontents' 31 mag worden vermeld
om alle bovenstaande waarden uit de betreffende cellen te verwijderen.

Code: Selecteer alles

sub S_en_O_Wissen

ThisComponent.lockControllers

with thiscomponent.sheets(0) 'dit is Blad1 (nummering begint met 0)
	.getcellrangebyname("B7").clearcontents(31) '31 is de som van mogelijke waarden om de inhoud te wissen:
	.getcellrangebyname("B9").clearcontents(31) ' 1 = VALUE      (waarde)
	.getcellrangebyname("B11").clearcontents(31)' 2 = DATETIME   (datum-tijd)
	.getcellrangebyname("D7").clearcontents(31) ' 4 = STRING     (tekenreeks)
	.getcellrangebyname("D9").clearcontents(31) ' 8 = ANNOTATION (notitie)
	.getcellrangebyname("D11").clearcontents(31)'16 = FORMULA    (formule)
	.getcellrangebyname("I7").clearcontents(31)
	.getcellrangebyname("I9").clearcontents(31)
	.getcellrangebyname("I11").clearcontents(31)
	.getcellrangebyname("K5").clearcontents(31)
	.getcellrangebyname("K7").clearcontents(31)
	.getcellrangebyname("K9").clearcontents(31)
	.getcellrangebyname("K11").clearcontents(31)
        .getcellrangebyname("B5").setValue("1")
end with
	
ThisComponent.unlockControllers

End Sub
OpenOffice 4.3.1 op Windows 7
Gebruikersavatar
DiGro
Berichten: 86
Lid geworden op: wo mei 13, 2009 4:57 pm
Locatie: Hoorn NH

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door DiGro »

Dat heeft Andrew Pitonyak al voor ons uitgezocht.
In zijn document AndrewMacro.odt vind je deze macro:

Code: Selecteer alles

Sub MoveCursorToCell
  Dim oCell
  Dim oSheet
  Dim oRanges

  REM Get the first sheet.
  oSheet = ThisComponent.getSheets().getByIndex(0)
  REM Get cell A2
  oCell = oSheet.GetCellbyPosition( 0, 1 )
  REM Move the selection to cell A2
  ThisComponent.CurrentController.Select(oCell)
  
  REM Select an empty range..
  oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  ThisComponent.CurrentController.Select(oRanges)
End Sub
Daarmee zou je het moeten kunnen uitvinden ;)
DiGro

----------------------------------------------------
Windows 11 en AOO 4.1.15
Gescand door Ziggo Safe Online (F-Secure)
Nick1980
Berichten: 12
Lid geworden op: vr okt 12, 2012 3:34 pm

Re: Knipperend beeldscherm bij uitvoeren macro, Calc

Bericht door Nick1980 »

Helemaal opgelost mooi werk tnx iedereen !

Nick
OpenOffice 4.3.1 op Windows 7
Plaats reactie