Hallo,
und entschuldigung. Bei dem 1. Makro habe ich natürlich das Wichtigste
Vergessen:
Dim aSortFields(0) as New com.sun.star.util.SortField
Dim aSortDesc(0) as New com.sun.star.beans.PropertyValue
Auserdem habe ich alles noch User-freundlicher gemacht.
Hier der neue Code:(getestet und läuft) :-)
Function sortByColumn (ByVal nSortColumn AS Integer,ByVal sSortSheet As
String,ByVal sSortRange As String,ByVal bAscending As Boolean)AS String
sortByColumn= "Sortier-Funktion"
Dim nColumn, nRow, nColumn1, nRow1 as integer
Dim aSortFields(0) as New com.sun.star.util.SortField
Dim aSortDesc(0) as New com.sun.star.beans.PropertyValue
Dim oSortRange As Object
Dim oSheet1 As Object
oSheet1 = ThisComponent.Sheets.GetByName(sSortSheet)
'sSortSheet = Name der Tabelle. Darf nicht Die Tabelle Sein, auf der die
Funktion Steht.
oSortRange = oSheet1.getCellRangeByName(sSortRange)'(nColumn, nRow,
nColumn1, nRow1)
'nColumn, nRow, nColumn1, nRow1 fangen bei 0! an zu zählen. (0 ,0 ,2 ,
4)=(A1:C5)
aSortFields(0).Field = nSortColumn ' "nSortCoulumn" ist die
Spaltennummer, nach der Sortiert werden sooll. Spalte A = 0
aSortFields(0).SortAscending= bAscending '1 entspricht "True" für
aufsteigend und 0 entspricht "False" für absteigend
aSortDesc(0).Name = "SortFields"
aSortDesc(0).Value = aSortFields()
oSortRange.Sort(aSortDesc())
End Function
diesen Code einfach in ein Neues Modul
kopieren.(Menü->Extras->Makros->MakrosVerwalten->Libreoffice
Basic->"Dein dokument"
->Standard->Auf Neu klicken-> Modul Umbenennen in
z.B"sortierFunktion"->Makro aus der e-mail einfügen->Speichern.
Aufgerufen wird die Funktion mit:
=SORTBYCOLUMN(B1;"Tabelle2";"A15:C28";B2)
B1 =Zelle, in der steht,nach welcher Spalte sortiert werden soll.(Spalte
A =0, Spalte B =1)
Tabelle2=Tabellenname der zu sortirenden Tabelle ( muss in "" stehen.)
A15:C28= zu sortierender Bereich ( ohne Kopfzeile)( muss in "" stehen.)
B2=Zelle, in der steht,ob aufsteigend(1) oder absteigend(0) Sortiert
werden soll.(man kann hier auch direkt 1 oder 0 eintragen)
Wichtig: der Funktionsaufruf "=SORTBYCOLUMN(B1;"Tabelle2";"A15:C28";B2)"
darf nicht auf der gleichen Tabelle wie die zu sortierende Tabelle stehen.
viel Erfolg Wünscht
Frieder
-------- Original-Nachricht --------
Betreff: Re: [de-users] Makros aufzeichnen und der Änderung einer Zelle
zuweisen..
Datum: Wed, 19 Oct 2011 02:22:21 +0200
Von: Frieder <delorfr@googlemail.com>
An: users@de.libreoffice.org
/
//From/: gooly <gooly@gmx.at <mailto:gooly%40gmx.at>>
Hallo,
Ich habe eine Zelle (Analyse:B4), der ich, wenn ich sie ändere, einen
anderen Spaltenbuchstaben (zB 'n') einer anderen Tabelle (Tests)
eintrage. Jetzt möchte ich gerne ein Makro schreiben, dass die 'andere
Tabelle' insgesamt nach dieser Spalte sortiert wird. Leider finde ich
nicht (mehr?):
a) die Option, Maus- und Tasten-'Dings' als Makro aufzuzeichnen - das
würde alles etwas leichter machen und
Makros aufzeichnen ist meistens keine saubere Lösung.
b) wie ich dann dieses Makro einer Veränderung einer bestimmten
(dieser) Zelle zuordne?
Das geht nur über eine Funktion.
Ich meinte b) noch gerade gefunden zu haben (Menu => ..(?).. =>
Änderungen => Zelle) - aber jetzt ist der Weg weg? Unter Extras=>
Anpassen .. sehe ich nur entweder einzelnen Tasten- (F2,F3,..) oder
Gesamtdokument-Änderungen (Sicher, Öffnen, ..?
LG, Gooly
Hier eine Lösung von mir:
Kopiere diesen Code in ein neues Modul,
und passe die Platzhalter "TabellenName" und " nColumn, nRow, nColumn1,
nRow1 " deinen Bedürfnissen an.
Function sortByCoulumn (ByVal nSortCoulumn AS Integer, ByVal bAscending
As Boolean)
Dim oSheet1 As Object
' "nSortCoulumn" ist die Spaltennummer, nach der Sortiert werden sooll.
Spalte A = 0
oSheet1 = ThisComponent.Sheets.GetByName("TabellenName")
'" nColumn, nRow, nColumn1, nRow1 " Mußt du deinen bedürftnissen
anpassen (Zu Sortierender Bereich)
oSortRange = oSheet1.getCellRangeByPosition(nColumn, nRow, nColumn1, nRow1)
'nColumn, nRow, nColumn1, nRow1 fangen bei 0! an zu zählen. (0 ,0 ,2 ,
4)=(A1:C5)
aSortFields(0).Field = nSortCoulumn - oColumn
aSortFields(0).SortAscending = bAscending '1 entspricht "True" für
aufsteigend und 0 entspricht "False" für absteigend
aSortDesc(0).Name = "SortFields"
aSortDesc(0).Value = aSortFields()
oSortRange.Sort(aSortDesc())
End Function
Anschließend Schreibst du Folgende Funktion in eine Zeile Deiner Tabelle:
=SORTBYCOULUMN("Deine Zelle";1) ' "Deine Zelle" ist z.B. D7 hier muss
die Spaltennummer (Zahl von 0 bis ...),
nach der du Sortieren möchtest Stehen. Die 1 steht für Aufsteigend. wenn
du 0 schreibst, wird absteigend sortiert.
Sobald der Wert in "Deine Zelle" verändert wird, wird die entsprechende
Tabelle Sortiert.
LG Frieder
PS: habe deinen Beitrag erst jetzt gelesen, deshalb antworte ich erst
jetzt.