Activecel tonen in A1

Hallo,
Misschien ben ik hier niet op de juiste plaats, heb nog wat te leren.
Ik ben echt een beginneling wat betreft basic.
Deze macro geeft een foutmelding

Sub PlaatoAdresInA1
    Dim oSheet As Object
    Dim oCell As Object
    Dim oAddress As String
    
    oSheet = ThisComponent.CurrentController.ActiveSheet
    oCell = ThisComponent.CurrentSelection
    
    oAddress = oCell.CellAddress
    oSheet.getCellRangeByName("A1").String = sAddress
End Sub

Kan goed zijn dat er meer fout is en stel het dan ook op prijs me hierin te corigeren.
Nieuwsgierig naar de reactie op mijn vraag.
Met vriendelijke groet,
Co.

CellAdres is geen ketting, zo niet een structuur

https://api.livreoffice.org/docs/idl/ref/structcom_1_1sun_1_1_1CellAddress.html

maar wat wil je echt doen?

Dank voor je reactie :slight_smile:

Wat ik wil is dat in Libreoffice calc m.b.v. een macro het adres van de actieve cel getoond wordt in cel A1 (liefst continue zolang ik in het bestand werk)
Dus welke cel ik waar ook in het blad heb geselecteerd, dus actief, daarvan moet het adres dan in A1 komen.

mvrgrt,
Co.

Is het gewoon een oefening? waarom de actieve cel altijd in het naamvak wordt getoond.

image

Dank je wel,
Klopt maar ik wil dit gebruiken voor het invullen van gegevens in diverse tabellen.
De gegevens die ik in kan vullen zijn afhankelijk van de rij waar ik deze kan invullen.
Ik maak gebruik van Rij() en Kolom() maar de waardes zijn er pas na een actie van Als dit dan en anders dat. Dit werkt wel maar is niet handig. Als ik rijnummer van de active cel direct uit A1 kan halen is dat handig. Als ik het adres van de active cel in A1 heb dan kan ik zowel rij- als kolomnummer hier uit halen.
In het verre verleden had ik in Excel iets in VBA wat zo werkte. Nu met LibreOffice moet dit in Basic. Ik ben mijn oude bestand kwijt maar heb ook gemerkt dat dit net weer anders is.
In het naamvak is dit inderdaad te zien en maak hier ook gebruik van om hier bepaalde cellen of tabellen een naam te geven. Ik dacht niet dat ik de waardes die in het naamvak komen direct (automatisch) in mijn tabel kan overnemen/gebruiken.

Ik krijg ‘Onjuiste waarde voor eigenschap’ op: oAddress = oCell.CellAddress
(In bovenstaande code heb ik wat door elkaar gehaald en aangepast. Zo staat er: oAddress en sAddress)
Wat klopt hier niet aan of ben ik vergeten?

Ik denk dat meer mensen belangstelling krijgen wanneer duidelijk gemaakt wordt wat het doel van het geheel is. In het begin geef je al aan dat je niet zo goed weet hoe het werkt in BASIC maar het grote probleem is dat alles bijna gedaan moet worden in API aanroepen. Die API aanroepen zijn nog wat moeilijker.
Mijn idee is probeer een goed begrip wat er zonder BASIC en API aanroepen mogelijk is.

Ik ben er van overtuigd dat iedereen hier zit om anderen ook te helpen en vind dat ook heel plezierig. Begrijp ik uit deze reactie dat ik beter een andere manier zoek om wat ik wil dan gebruik te maken van een macro?
Als de vraag is aan te geven wat ik wil met deze enkele macro om te realiseren wat ik wil dan wordt dat een heel verhaal. Mijn werkblad in Calc werkt zoals het nu is zonder macro’s. Ik plan een groep mensen die wisselend in tweetallen werken en hebben wisselend 4 taken over 4 weken, per week een taak. Er zijn 2 tallen die uitsluitend samen werken. Er zijn mensen die iedere dag van de week beschikbaar zijn en mensen die een paar (vaste) dagen beschikbaar zijn of dagen beslist niet. Ook zijn er mensen die wel op oneven weken kunnen werken en andersom. Tot slot heeft iedereen opgegeven welke weken van het jaar wel of niet beschikbaar te zijn.
Tot zover heb ik alles in een aantal tabellen staan en kan deze eenvoudig aanpassen als er mensen weggaan of nieuwe bijkomen. Hetzelfde met de beschikbaarheid e.d.
Op mijn werkblad waar de planning gemaakt wordt heb ik een maand overzicht waar ik per cel en op datum een keuzemenu krijg met de dan beschikbare mensen en waarin is meegenomen of deze mensen samenwerken met wie (degene niet komen dan ook niet in de keuze) en ook wie dan ook beschikbaar is.
Dit alles werkt prima en werkt heel plezierig.
Echter zou ik het nog wat eenvoudiger kunnen invullen als ik gebruik kan maken van het adres van de active cel, waar ik dus mijn keuzemenu krijg, als ik dit bijv uit cel A1 kan halen (wat mij betreft cel ZZ300 welke totaal niet in beeld is)
Ik ben opzoek geweest om wat te begrijpen van Basic maar wat ik gevonden heb helpt me nog niet echt.
Vroeger met Excel en VBA kreeg je ook gelijk de aanvullende code te zien met waar je mee bezig was. Dit maakte het wat begrijpelijker. Nu wil ik zeker niet meer terug naar MS

Vergeten te reageren @elmau, excuus. De link werkt helaas niet, ook niet als ik livreoffice wijzig in libreoffice. Met LibreOffice: Main Page kom ik wel wat verder en lijkt er op dat ik hier wat meer informatie ga vinden. Dank hiervoor.

Wat me wel lukt is om het rijnummer te tonen. Voor nu heb ik de macro toegewezen aan een knop. Hiermee kan ik nu doen wat ik wilde invoegen in mijn bestand. Als dit met de knop niet werkt ga ik proberen dit in een loop te zetten zodat het continue werkt.
:

Sub ToonRijNummer()
Dim rijnummer As Integer
rijnummer = ThisComponent.CurrentSelection.getRangeAddress().StartRow

’ Rijnummer in cel A1
Dim oSheet As Object
Dim oCell As Object
oSheet = ThisComponent.CurrentController.ActiveSheet
oCell = oSheet.getCellRangeByName(“A1”)
oCell.Value = rijnummer + 1
End Sub

Misschien is het wel verstandig om op het Engelse forum te kijken, daar worden ook regelmatig links geplaatst die belangrijk zijn. Het is zo dat de werkmethode onder LibreOffice echt geheel anders is dan onder Excel. LibreOffice kent niet het begrip ActiveCell wel werkt het veel met gebeurtenissen of events in het Engels.
Bij een blad gebeurtenis bijvoorbeeld selectie gewijzigd wordt gelijk naar de actievecel verwezen. Wanneer je werkt met MRI kun je onderzoeken wat daar mee mogelijk is.

Realiseer je wel het is aan de gebruiker om uit te zoeken wat er nu feitelijk is geselecteerd:

  • Een enkele cel
  • Een enkele bereik
  • een samen stel van cellen en bereiken.

CurrentSelection
Thiscomponent.CurrentSelection geeft een verwijzing naar de huidige selectie wat feitelijk hetzelfde is wat mogelijk het zelfde is wat de beschreven gebeurtenis doet.

Gebeurtenis of Currentselection
Ik krijg het idee dat het gezien de mogelijkheden en moeilijkheden nauwelijks uitmaakt waar voor gekozen maar er moet uit gezocht worden wat er alle maal mee gedaan kan worden. Hiervoor moet echt kennis verkregen worden van de Services en interfaces. Die services en interfaces is echt iets anders dan BASIC. Het BASIC, starBASIC, is veel beperkter dan het BASIC van VBA. Dit maakt ook dat ik aangeef doe zoveel mogelijk in het werkblad.

http://www.pitonyak.org/oo.php
Misschien zijn er betere verwijzingen te vinden.

@RPG Dat VBA duidelijk anders is had ik al begrepen, enerzijds helaas maar nu leer ik ook weer wat anders :slight_smile:
Voor nu ga ik de routine gebruiken waarbij het regelnummer terugkomt in A1.
Mijn vraag ga ik hierbij afsluiten als zijnde opgelost.
@elmau en @RPG dank voor jullie info.