Seite 1 von 1
Format in allen Zellen einer Spalte setzen [GELÖST]
Verfasst: Sa 16. Nov 2024, 15:39
von Rolf_V
Ich möchte mit einem Makro das Zahlenformat aller Zellen einer Spalte auf 114 (=Dezimalzahl mit 2 Nachkommastellen, Tausenderpunkt, negativ rot) setzen. Mein Kode sieht so aus:
Code: Alles auswählen
sub main
...
setDecInCol(4,114)
...
end sub
sub setDecInCol(S,F)
thiscomponent.CurrentController.Select(thiscomponent.Sheets(0).getColumns().getByIndex(S))
thiscomponent.getCurrentSelection().NumberFormat = F
end sub
Die Spalte wird zwar ausgewählt, aber dann passiert nichts. Bei Dannenhöfer und Pitonyak habe ich keine funktionierenden Vorschläge gefunden. Es kamen entweder Fehlermeldungen, mit denen ich nicht anfangen kann, oder es passierte gar nichts.
Wo liegt mein Fehler?
Re: Format in allen Zellen einer Spalte setzen
Verfasst: Sa 16. Nov 2024, 17:18
von mikele
Hallo,
woher weißt du, dass dieses Format den Key 114 hat? Bei mir passiert auch nichts, da dieser Key bei mir nicht existiert.
Re: Format in allen Zellen einer Spalte setzen
Verfasst: Sa 16. Nov 2024, 17:48
von mikele
Hallo,
um das sauber zu lösen, müsste zunächst die korrekter Nummer des Zahlenformats herausgefunden werden.
Das geht z. B. mit folgender Funktion:
Code: Alles auswählen
Function numkey (formatstring)
Dim sLocale as New com.sun.star.lang.Locale
NumForms = ThisComponent.getNumberFormats()
NumKey = NumForms.queryKey(FormatString, sLocale, True)
IF NumKey = -1 Then '-1 means no value found for the requested format
NumKey = NumForms.addNew(FormatString, sLocale) 'create a new key
end if
End Function
Sie liefert die Nummer des übergebenen Zahlenformats (als formatstrings). Sollte es noch nicht existieren, wird es gleich mit angelegt.
Dann kannst du es in deinem Code verwenden, z. B. so (etwas abgewandelt):
Code: Alles auswählen
sub main
...
setDecInCol(4,"#.##0,00;[ROT]-#.##0,00")
...
end sub
sub setDecInCol(S,F)
Thiscomponent.CurrentController.ActiveSheet.Columns(S).NumberFormat = numkey(F)
end sub
Ob für so einen Einzeiler eine extra Sub sinnvoll ist ... Wenn in der sub main die gewünschte Tabelle schon angesprochen wurde, z. B.
dann würde sich das ganze ja auf
Code: Alles auswählen
sub setDecInCol(S,F)
Tabelle.Columns(S).NumberFormat = numkey(F)
end sub
reduzieren.
Re: Format in allen Zellen einer Spalte setzen
Verfasst: Sa 16. Nov 2024, 18:03
von Rolf_V
mikele hat geschrieben: ↑Sa 16. Nov 2024, 17:18
Hallo,
woher weißt du, dass dieses Format den Key 114 hat? Bei mir passiert auch nichts, da dieser Key bei mir nicht existiert.
Dafür habe ich das Makro
Code: Alles auswählen
sub ZeigeZellFormat
msgbox thiscomponent.getCurrentSelection().NumberFormat
end sub
Re: Format in allen Zellen einer Spalte setzen
Verfasst: Sa 16. Nov 2024, 18:11
von mikele
Hallo,
dann ist eigentlich alles korrekt ...
Da du auf der 1. Tabelle arbeiten willst, reicht aber
Code: Alles auswählen
sub setDecInCol(S,F)
Thiscomponent.Sheets(0).Columns(S).NumberFormat = F
end sub
Re: Format in allen Zellen einer Spalte setzen [GELÖST]
Verfasst: Sa 16. Nov 2024, 18:23
von Rolf_V
mikele hat geschrieben: ↑Sa 16. Nov 2024, 17:48
Hallo,
um das sauber zu lösen, müsste zunächst die korrekter Nummer des Zahlenformats herausgefunden werden.
Das geht z. B. mit folgender Funktion:
Code: Alles auswählen
Function numkey (formatstring)
Dim sLocale as New com.sun.star.lang.Locale
NumForms = ThisComponent.getNumberFormats()
NumKey = NumForms.queryKey(FormatString, sLocale, True)
IF NumKey = -1 Then '-1 means no value found for the requested format
NumKey = NumForms.addNew(FormatString, sLocale) 'create a new key
end if
End Function
Sie liefert die Nummer des übergebenen Zahlenformats (als formatstrings). Sollte es noch nicht existieren, wird es gleich mit angelegt.
Auch mit dieser Funktion erhalte ich für dieses Format die 114
mikele hat geschrieben: ↑Sa 16. Nov 2024, 17:48
Ob für so einen Einzeiler eine extra Sub sinnvoll ist ... Wenn in der sub main die gewünschte Tabelle schon angesprochen wurde, z. B.
dann würde sich das ganze ja auf
Code: Alles auswählen
sub setDecInCol(S,F)
Tabelle.Columns(S).NumberFormat = numkey(F)
end sub
reduzieren.
Mein Makro ist sehr viel länger, es werden verschiedene gleichzeitig geöffnete Tabellen angesprochen.
Genau Deine letzte Code-Zeile ist das, was ich gesucht habe.
Danke, Mikele