Seite 1 von 1

ActiveSheet und ActiveCell

Verfasst: Fr, 27.02.2015 00:12
von wolltiger
Hallo!
Ich möchte in einer Tabelle die letzte belegte Zelle finden. Das Problem läßt sich mit dem Macro-Recorder lösen, aber:
Der Macro-Recorder selektiert die Seite nach Index, ich weiß aber nur den Namen. Wenn ich aber mit
srce=thiscomponent.sheets.getbyname("Master")
das sheet hole, wird es nicht automatisch zur ActiveSheet; ich brauche also den Index für den DispatchHelper: wo finde ich den?

Jetzt kann ich mit Tastaturbefehlen die letzte belegte Zelle suchen, und das mit dem Recorder aufzeichnen. Jetzt benötige ich aber im Macro die Zeile/Spalte dieser Zelle. Wo bekomme ich diese Information?
Sprache: OOoBasic
Danke für jede Antwort.

Re: ActiveSheet und ActiveCell

Verfasst: Fr, 27.02.2015 06:57
von clag
Moin wolltiger,

ein paar Zeilen zusätzlich (die eingerückten) vor und nach dem aufgezeichnetenm Code zum auffinden der letzten verwendeten Zelle,
sollten deinen Wunsch erfüllen

Code: Alles auswählen

sub MasterLastCell
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")


	StartSheet = thisComponent.getCurrentSelection.CellAddress.sheet
	thiscomponent.lockcontrollers
	thisComponent.CurrentController.setActiveSheet(thisComponent.Sheets().getByName("Master")) 


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

dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args1())
rem ----------------------------------------------------------------------


	mLCel = thisComponent.getCurrentSelection.AbsoluteName
	mLCol = thisComponent.getCurrentSelection.CellAddress.column
	mLRow = thisComponent.getCurrentSelection.CellAddress.row
	thisComponent.CurrentController.setActiveSheet(thisComponent.Sheets(StartSheet)) 
	msgbox mLCel & chr(10) & "letzte verwendete Spalte = " & mLCol & chr(10) & "letzte verwendete Zeile = " & mLRow 
	thiscomponent.unlockcontrollers

end sub
aus einer beliebigen Tabelle heraus, kannst du hiermit die letzte benutzte Zelle in der Tabelle "Master" abfragen.

Re: ActiveSheet und ActiveCell

Verfasst: Fr, 27.02.2015 08:02
von Karolus
Das geht auch ohne den ganzen Dispatcherquark

Code: Alles auswählen

doc = ThisComponent
master = doc.Sheets.getByName("Master")
curs = master.createCursor()
curs.gotoEndOfUsedArea(False)
adress = curs.RangeAddress
lastRow = adress.StartRow
lastColumn = adress.StartColumn

Re: ActiveSheet und ActiveCell

Verfasst: Fr, 27.02.2015 10:53
von clag
Hi Karolus,
Karolus hat geschrieben:Das geht auch ohne den ganzen Dispatcherquark

das wäre ja direkt ideal, wenn OO gleich den richtigen Basic-Code aufzeichnen würde
(so wie es Excel macht), dann würde bestimmt so manche Frage erst gar nicht aufkommen.

Aber das ist in OO aber leider nicht der Fall, von daher kommt jemand der in OO ein Makro aufgezeichnet hat,
eben nicht drumherum und auch nicht ohne diesen "Dispatcherquark" aus.

Re: ActiveSheet und ActiveCell

Verfasst: Fr, 27.02.2015 11:27
von Karolus
clag hat geschrieben:Hi Karolus,
Karolus hat geschrieben:Das geht auch ohne den ganzen Dispatcherquark

das wäre ja direkt ideal, wenn OO gleich den richtigen[1] Basic-Code aufzeichnen würde
(so wie es Excel macht), dann würde bestimmt so manche Frage erst gar nicht aufkommen.

Aber das ist in OO aber leider nicht der Fall, von daher kommt jemand der in OO ein Makro aufgezeichnet hat,
eben nicht drumherum und auch nicht ohne diesen "Dispatcherquark" aus.
dich zwingt niemand dazu mit der Code-aufzeichnung zu arbeiten ( die im übrigen ziemlich genau das abbildet was $Benutzer zusammenklickt)

Mit Grundkenntnissen in Basic, etwas Recherche bei Dannenhöfer und ein wenig "Selberdenken" sollte das gelingen.
Mit der Benutzung von MRI bekommst du übrigens den "richtigen"[1] Code[2] gratis dazu aufgezeichnet.


[1] definiere zunächst mal was "richtig" ist!

[2] wahlweise in Basic, Python, Java, ...

Re: ActiveSheet und ActiveCell

Verfasst: Sa, 28.02.2015 01:42
von wolltiger
Hey Leute, Super, Danke!
Wie Ihre seht, bin ich noch ziemlich neu bei OO-Basic.
Jetzt habe ich meine Aufgabe: Recherche bei dannhöfer.
Und wo finde ich Info zu MRI ?? :D

Re: ActiveSheet und ActiveCell

Verfasst: Sa, 28.02.2015 08:25
von F3K Total
Hier?
Gruß R