Seite 1 von 2

Makro Fehlermeldung

Verfasst: Di 15. Okt 2024, 12:56
von kukur
Ich habe eine Tabelle mit ca. 100 Zeilen und 4 Spalten, die ich nach den Spalten 2 - 4 (numerisch) sortieren möchte. Wenn ich diese Sortierung in Einzelschritten (zuerst Tabelle markieren, dann; Tabelle - Sortieren ...) durchführe, klappt das problemlos. Wenn ich aber die gleichen Schritte als Makro aufzeichne und speichere, geht das zwar noch problemlos, beim Makro ausführen gibt es dann aber die Fehlermeldung: "BASIC-Syntaxfehler. Erwartet: Sub." Was lief da schief?

Re: Makro Fehlermeldung

Verfasst: Di 15. Okt 2024, 13:22
von karolus
kukur hat geschrieben:
Di 15. Okt 2024, 12:56
"BASIC-Syntaxfehler. Erwartet: Sub." Was lief da schief?
…das korrekte Abspeichern nach der Aufzeichnung!?

und ausserdem bist du hier im falschen Unterforum … besser aufgehoben wäre das Thema in Basic und Makro oder wenigstens Calc

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 16:37
von kukur
Ich habe das Makro dort abgespeichert, wo es das Programm vorschlägt (siehe Anhang) und das so abgespeicherte Makro danach ausgeführt, was zur Fehlermeldung (siehe Anhang) geführt hat.

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 17:15
von karolus
kukur hat geschrieben:
Do 17. Okt 2024, 16:37
(siehe Anhang)(siehe Anhang)
Nein Ich sehe ihn nicht!

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 17:23
von kukur
Sorry, das war ein Missgeschick. So sollte es klappen.

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 17:49
von karolus
Zeile 1: EMREM

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 18:34
von kukur
Danke, das hat zunächst einmal geholfen, es gibt beim Befehl "Makro ausführen" keine Fehlermeldung mehr. Aber: wenn ich den Makro - der eine Tabelle nach drei Kriterien sortieren sollte - ausführe, erscheint einfach das Sortierfenster und ich muss den ganzen Sortierprozess von Hand eingeben.

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 19:11
von karolus
Das ist ja seltsam … Wenn ich ⇒ Daten ⇒ Sortieren …(mit drei Kriterien etcpp.) ausführe und aufzeichne kommt was ganz anderes raus wie bei Dir, wie kann es sein das deine Aufzeichnung nicht funktioniert? 8-)

Code: Alles auswählen

sub Aufzeichnung_DAten_Sortieren_dialog

dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args2(13) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = true
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "NaturalSort"
args2(3).Value = false
args2(4).Name = "IncludeAttribs"
args2(4).Value = true
args2(5).Name = "UserDefIndex"
args2(5).Value = 0

args2(6).Name = "Col1"   '1.kriterium
args2(6).Value = 2        ' Spalte B…
args2(7).Name = "Ascending1"
args2(7).Value = true     '…Aufsteigend

args2(8).Name = "Col2"    '2. Kriterium
args2(8).Value = 1        'Spalt  A…
args2(9).Name = "Ascending2"
args2(9).Value = true     'Aufsteigend

args2(10).Name = "Col3"   '3. Kriterium
args2(10).Value = 3        'Spalte C
args2(11).Name = "Ascending3"
args2(11).Value = false    'Absteigend

args2(12).Name = "IncludeComments"
args2(12).Value = false
args2(13).Name = "IncludeImages"
args2(13).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())


end sub

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 20:14
von kukur
Vielleicht liegt es daran, dass ich die Tabelle im Writer (und nicht mit Calc) sortieren will. Also mit Extras > sortieren.
Ich bin ganz neu bei LibreOffice und dabei, von MS Office umzusteigen. In MS Word funktioniert dieser Makro einwandfrei auf Anhieb, aber ich habe verstanden, dass die Makros von MS Office nicht auf LibreOffice übertragbar sind, sondern dass man sie dort neu schreiben muss, und das scheint ja nun nicht auf Anhieb zu gehen.

Re: Makro Fehlermeldung

Verfasst: Do 17. Okt 2024, 21:27
von karolus
Hallo

Also doch in writer! … da stösst die Makro-Aufzeichnung an seine Grenzen.

Daher mal schnell zusammengehackt in python:

Code: Alles auswählen

def sort_writer_table(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.TextTables["Tabelle1"]   #trag hier den Namen der Tabelle ein!
    header, *data =sheet.DataArray # Kopfzeile ? nicht sortieren?
    out = [ header ]
    out.extend(sorted(data,
                      key=lambda row: (float(row[1]),   #2te Spalte
                                       float(row[2]),   #3te Spalte
                                       float(row[3])))) #4te Spalte
    sheet.DataArray = out    
sollte einigermassen selbsterklärend sein…
bei den Spalten die absteigend sortiert werden sollen, setzt du einfach ein -zeichen vor »float«
zum organisieren von python nimmst du am besten apso.oxt von hier