Probleem met sheet referenties in Macros

Bespreek het rekenblad
Frankkiek
Berichten: 2
Lid geworden op: za nov 07, 2020 3:19 pm

Probleem met sheet referenties in Macros

Bericht door Frankkiek »

Ik heb een file met een groot aantal sheets.
Op de eerste sheet heb ik een aantal buttons zodat ik van de eerste sheet gelijk naar de juiste sheet kan schieten.
Dit wordt gedaan door middel van een macro. En tot zover gaat alles goed.

Nu heb ik in de rij sheets een sheet toegevoegd en dan buttons achter de nieuw sheet niet meer naar de juiste sheet te verwijzen.

In de Macro wordt namelijk naar een nummer verwezen en niet naar de sheet naam.
args1(0).Name = "Nr"
args1(0).Value = 19

Heb geprobeerd als oplossing hyperlink (F5) te plaatsen op de button sheet.
Met de hand werkt dit.
Met het opnemen van een macro werkt dit ook.
Maar met het runnen van een macro werkt deze hyperlink dus niet.

Dus de vraag is:
Kan ik een verwijzing maken naar de sheet naam i.p.v. een nummer??
Zodat ongeacht het aantal sheets of de positie van de sheets de macros blijven werken.
Libre Office 7.0.2.2 (x64)
Windows 10
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Probleem met sheet referenties in Macros

Bericht door RPG »

Ik denk dat je er goed aan doet om te leren om te gaan OpenOffice. Ik gebruik de naam OpenOffice voor alle versies die er zijn: ApacheOffice en LibreOffice en nog wat meer onbekende namen.

Je doet er goed aan om macro's te vermijden. Macro's in OpenOffice zijn echt veel moeilijker dan in Excel en ik heb het idee dat je komt van Excel. Het is zo dat je waarschijnlijk echt een iets andere manier van oplossingen moet zien te vinden. Wanneer je een gevorderde gebruiker bent doe je er misschien goed aan andere oplossingen te vinden en ik denk niet dat ik je daar bij kan helpen en kun je misschien beter hulp vragen op het Engelse Forum

Terug komen op de vraag.
Naar mijn idee is het in het geheel niet nodig om een macro te gebruiken. Er zijn naar mijn idee verschillende mogelijke oplossingen maar die zijn vaak gebaseerd op voorbereidend werk wat ik ook niet zo paraat heb maar zal trachten te beschrijven.

Namen geven
Geef namen aan een enkele cel of een compleet gebied. Gebruik deze naam in het maken van een hyperlink. Ik merk zelf dat de dialoog voor hyperlink(Ctrl-K) toch echt wel behulpzaam wil zijn als je zaken probeer. Ik moet tot mijn schande bekennen dat ik die dialoog ook onderschat heb.

Navigator
Gegeven namen willen vanuit de navigator gesleep naar een cel en worden als een tekst link ingevoegd. De hyperlinkdialoog kan het ook veranderen in een button.

Sheet adres
Je kunt gewoon een compleet adres opgeven. Ik kunt geen onderscheid kunt maken in relatieve en absolute adressering. Uit een kleine test blijkt dat je beter een naam kunt geven.

Als je met knoppen werkt moet je wel weten hoe je een formulier kunt veranderen van en naar edit mode. Dit is een eenvoudige knop.
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: Probleem met sheet referenties in Macros

Bericht door RPG »

Ik ben niet zo erg bekend met opgenomen macro's maar je je kunt ook onderstaande macro opnemen.

Code: Selecteer alles

sub Main3
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 = "Blad3.K7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub
Dit doe je door een adres of naam in te geven in het Naamvak. Het Naamvak is dat gedeelte waar altijd het adres van de actieve cel weergegeven wordt. Als je een naam definieert voor een cel wordt die naam gebruikt.
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Frankkiek
Berichten: 2
Lid geworden op: za nov 07, 2020 3:19 pm

Re: Probleem met sheet referenties in Macros

Bericht door Frankkiek »

Beste RPG,

Dank voor je reactie.
Ik ben/was inderdaad een 100% Excel gebruiker. Maar wilde een keer iets anders.
En op sommige punten is het vechten/wennen m.b.t. Excel.

Je uitleg is duidelijk. En ik heb met Libre Calc nog een en ander te leren.
De macro die jij opgeeft lost in ieder geval het probleem dat ik nu heb op.
Buttons etc werken verder prima.

Nogmaals dank.
Libre Office 7.0.2.2 (x64)
Windows 10
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Probleem met sheet referenties in Macros

Bericht door RPG »

Wat ik zie bij veel computergebruikers is dat er weinig gebruik gemaakt wordt van wat ik noem de ingebouwde mogelijkheden. Alle office programma's kunnen redelijk goed met tabellen omgaan zeker wanneer dit zogenaamd platte tabellen zijn. In plaats van dat de gebruiker een enkel grote tabel maakt waar alle gegevens in verzameld zijn, worden de gegevens verspreid over diverse kleine tabellen. Deze kleine tabellen worden dan vaak werkbladen genoemd. Om een overzicht te krijgen van deze kleine tabellen moeten dan weer veel moeilijke formules gebruikt worden. Vanaf het begin heb ik pogingen gedaan om te zorgen dat ik deze wat meer moeilijke ingebouwde hulpmiddelen kon begrijpen.

Draaitabellen
Draaitabellen of pivottables is een geweldig hulpmiddel om iets met een grote tabel te doen zonder dat er veel formules gebruikt worden. Ook kan het gebruikt worden om gegevens . In Tutorial over draaitabellen (Toon onderwerp) • OpenOffice.org staan links voor uitleg over draaittabbellen. Een uitleg van 30 bladzijden in Nederlands, wel voor Excel maar goed bruikbaar, en er is ook een link naar youtube die helaas in het Engels is. Het is in betrekkelijk eenvoudig Engels maar met een goede onderwijzers uitleg.
Draaitabellen zijn uitermate flexibel om gegevens in een later stadium te gebruiken.

Gegevensbereiken
Alle office programma's kennen ook het idee van gegevensbereiken wat ook het zelfde is als een platte tabel. LibreOffice heeft dit wat krachtiger gemaakt dan ApacheOffice. LibreOffice werkt waarschijnlijk nu het zelfde als Excel.
Het komt er op neer: maak een steeds kleinere tabel van de gegevens tot bijvoorbeeld alleen de gegevens zichtbaar zijn van de laatste maand van alle klanten. Met autofilter kan de laatste handeling gedaan worden voor dat de echte laatste bewerking gedaan wordt bijvoorbeeld het printen van facturen. Met enkele functies kunnen dan nog gegevens uit een andere tabel getoond worden.

Databases
OpenOffice kenmerkt zich door het feit dat er altijd een gratis database bij was. Ook was het altijd mogelijk om gebruik te maken van andere krachtige database programma's. LibreOffice heeft nu standaard Firebird. Persoonlijk denk ik dat Firebird wel een goed databaseprogramma zal zijn maar het wordt door de toonaangevende Engelse forumgebruikers nog niet gebruikt. De oude versie van HSQLDB is naar mijn idee voldoende voor thuisgebruik maar bedrijven, ook kleine, doen er goed aan om de nieuwe versie te gebruiken. FreeHSQLDB (Toon onderwerp) • OpenOffice.org is verplichtte kost voor een ieder die met een database wil werken en zeker wil zijn van gegevens.

Geregistreerde Database
OpenOffice maakt het mogelijk om gegevens die ergens zijn opgeslagen eenvoudig te gebruiken in een document. Het is voldoende om de naam te weten van de geregistreerdedatabase en daarna de tabel naam of toegepaste query.

Overstappen
De overstap van Excel naar OpenOffice kan misschien ook de aanleiding zijn om over te stappen naar een andere manier van omgaan met gegevens niet binnen een dag maar een langere periode. Wat ik geleerd heb van het Engelse forum is dat gegevens in grotere tabellen ook gemakkelijker te bevragen zijn. In [Opgelost] Koppeling kan niet bijgewerkt worden (Toon onderwerp) • OpenOffice.org kun je een voorbeeld zien dat werkelijk duizenden formules en ook nog zonder goed resultaat zijn terug te brengen tot enkele draaitabellen. LibreOffice doet dat nog beter als ApacheOffice. Het is wel een lang verhaal maar de kern is: hou de gegevens eenvoudig en laat de computer het werk doen.
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: Probleem met sheet referenties in Macros

Bericht door DiGro »

In de Macro wordt namelijk naar een nummer verwezen en niet naar de sheet naam.
args1(0).Name = "Nr"
args1(0).Value = 19
Verhoog het getal in de macro met 1 voor de sheets NA het nieuwe sheet

Voor de volledigheid hierbij een macro voor het ophalen van bladen op index of naam

Code: Selecteer alles

Sub SelecteerBlad()
document = ThisComponent  'wijst het huidige document toe aan de variabele document
Sheets = document.Sheets  'haal de container voor alle Sheets op

'op index van blad ophalen. Index begint met 0 voor Blad1
Sheet = Sheets.getByIndex(1)   'haal het Blad2 op.

'op naam blad ophalen
'Sheet = Sheets.getBy'Name("Blad3")   'haal het Blad3 op

Controller = document.getcurrentController
Controller.setActiveSheet(Sheet)
End Sub
Verwijder de ' voor Sheet = Sheets.getBy'Name om op naam op te halen en zet dan een ' voor Sheet = Sheets.getByIndex
Bijlagen
Selecteer Blad per macro.ods
Voorbeeld bestand met macro's
(11.8 KiB) 258 keer gedownload
DiGro

----------------------------------------------------
Windows 11 en AOO 4.1.15
Gescand door Ziggo Safe Online (F-Secure)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Probleem met sheet referenties in Macros

Bericht door RPG »

Commands
Ik ben de laatste tijd vooral aan het kijken wat de argumenten in houden die voor de Dispatch opdrachten gebruikt worden. Ook ben ik aan het kijken hoe de menu's en de werkbalken aangepast kunnen worden. Er is ook een gehele lijst met wat heet; commands: 1.2 Writer commands. Deze lijst wordt niet beschreven maar het is het zelfde als die gebruikt worden voor de menu's en werkbalken. Het is zo dat de lijst veel groter is dan voor de normale gebruiker direct toegankelijk is.

Commands beter toegankelijk
Menu --> Extra --> Aanpassen --> Nader te kiezen
Daar is het mogelijk om de zelfde lijst te zien wanneer we de menu's of werkbalken willen aanpassen. Bij Apache Office staat er vaak ook een zeer korte beschrijving bij en daar is het onderverdeeld in groepen.

Werkbalken en menu aanpassen per document
Het is goed mogelijk om in een document een eigen menu toegang te maken of een aangepaste werkbalk met enige extra mogelijkheden.

Commando .uno:Add
OpenOffice heeft gewoon de mogelijkheid om standaard een werkblad toe te voegen. Alleen de naam moet nog ingetypt worden. Let wel .uno:Add is een URL en kan dus ook ingevoegd worden met:
menu --> Invoegen --> Hyperlink
Dit command voegt automatisch een werkblad in aan het einde. Precies zoals de macro van DiGro. Ik wist ook niet dat het bestond.

Opnemen macro's
De gemaakte toegangen in werkbalken of menu's kunnen ook met de macro's opgenomen worden.


Voorbeeld opgenomen macro

Code: Selecteer alles

sub Main3
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 = "Name"
args1(0).Value = "Blad7"

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


end sub
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Plaats reactie