Hallo,
weiss jemand wie man ich die Zelle eines Buttons auslesen kann, nachdem er gedrückt wurde.
Mit ActiveCell... gehts nicht, weil beim click auf nen Button die ActiveCell nicht wechselt.
Ich will mit dem Button die Daten, die in den Feldern über ihm stehen, an eine andere Stelle kopieren und den Button dabei an verschiedenen Stellen im Dokument verwenden, ohne dass ich für jede Kopie eine Sub-Routine erstellen muss.
Danke,
Juve
Zelle des geklickten Buttons auslesen ?
Moderator: Moderatoren
Hey Juve,
Gruss
Thomas
Das wirtd schwierig. Der Button ist nämlich kein Element der Zelle, sondern befindet sich auf der Drawpage, lediglich seine Verankerung kann auf die Zelle verweisen. Das dann aber ist eine Berechnung des aktiven Controllers - in der ViewAnsicht. Du müsstest alos zunächst die Position des Buttons bestimmen, dann die Position der Zellen, und jetzt ein Übereinstimmung suchen. Da ist es einfacher, für jeden Button eine eigene Routine zu schreiben, die lediglich die Hauptroutine aufruft., welche dann die jeweiligen Zellen Kopiert. Der Vorteil dieser Methode liegt auf der Hand: Du kannst der Hauptfunktion als Parameter gleich die Zelladressen übergeben.weiss jemand wie man ich die Zelle eines Buttons auslesen kann, nachdem er gedrückt wurde.
Mit ActiveCell... gehts nicht, weil beim click auf nen Button die ActiveCell nicht wechselt.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hey Juve,
Aber - vielleicht mal eine andere Vorgehensweise: Du könntest einen "Listener" schreiben, der auf die aktivierung einer Zelle "reagiert". Dann könntest du statt eines Buttons die Zelle als "Button" nutzen, den Text reinschrieben, mit einer entsprechenden Hintergrundfarbe formatieren etc. Durch Klick darauf wird die Zelle aktiv, der Listener springt an, der vergleicht jetzt, ob es sich um einen "Button" handelt, zum Beispiel durch Vergleich der Hintergrundfarbe - und startet dann das Makro. Dadurch, dass du jetzt die aktive Zelle hast, ist das jetzt alles ohne größeren Aufwand möglich.
Hinsichtlich des Listeners musst du mal das Forum durchsuchen. Da gab es mal irgendetwas, das beim Klick auf eine Zelle irgentetwas geschehen sollte - und da wurde der Listener besprochen.
Gruss
Thomas
Na, dieser Weg ist genauso umständlich. Theoretisch ginge das: Über den Controller die Viewansicht bearbeiten. Diese "kennt" die Koordinaten des aktuellen Mauszeigers. Jetzt müsstest du die Koordinaten der aktuellen Viewansicht auslesen - und dann vergleichen.... extrem aufwendig.kann man die Zelle eines "LastUsedControl" auslesen ?
vielleicht gehts auch über den mousecursor und die Zelle über der er gerade ist ?
Aber - vielleicht mal eine andere Vorgehensweise: Du könntest einen "Listener" schreiben, der auf die aktivierung einer Zelle "reagiert". Dann könntest du statt eines Buttons die Zelle als "Button" nutzen, den Text reinschrieben, mit einer entsprechenden Hintergrundfarbe formatieren etc. Durch Klick darauf wird die Zelle aktiv, der Listener springt an, der vergleicht jetzt, ob es sich um einen "Button" handelt, zum Beispiel durch Vergleich der Hintergrundfarbe - und startet dann das Makro. Dadurch, dass du jetzt die aktive Zelle hast, ist das jetzt alles ohne größeren Aufwand möglich.
Hinsichtlich des Listeners musst du mal das Forum durchsuchen. Da gab es mal irgendetwas, das beim Klick auf eine Zelle irgentetwas geschehen sollte - und da wurde der Listener besprochen.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
hab den code hier gefunden: viewtopic.php?t=3165
klappt jetzt alles wie gewünscht. ich klicke auf das Wort: "button" und dan macht OO "was".
Danke für eure Hilfe
Code: Alles auswählen
Global oListener As Object
Global arow as Integer
Global acol as Integer
Global bBackjump as Boolean
Sub initializeListener
oListener = CreateUnoListener( "ClicListener_", "com.sun.star.view.XSelectionChangeListener" )
oDocument = ThisComponent
oDocument.getCurrentController.addSelectionChangeListener(oListener)
End Sub
Sub ClicListener_selectionChanged(oEvent)
Dim oSelection As Object
Dim bTest as Boolean
oSelection = oEvent.source.selection
if oSelection.supportsService ("com.sun.star.sheet.SheetCell") then
bTest = True
If oSelection.CellAddress.Row = arow Then
If oSelection.CellAddress.Column = acol Then
bTest = false
If bBackjump Then
bBackjump = false
Exit Sub
endif
end if
end if
bBackjump = bTest
arow = oSelection.CellAddress.Row
acol = oSelection.CellAddress.Column
If oSelection.string = "button" Then
mach_was(arow,acol)
end if
end if
End Sub
Sub mach_was(row as Integer,col as Integer)
print "mache was mit X:"+row+" Y:"+col
End Sub
Danke für eure Hilfe