🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] Eingabemaske für Calc-Tabelle

CALC ist die Tabellenkalkulation, die Sie immer wollten.
minbari
Beiträge: 49
Registriert: So 25. Aug 2024, 17:35

Nach Datum automatisch sortieren

Beitrag von minbari » Mo 16. Sep 2024, 11:31

also bei mir funktioniert deine Sub SortiereBereich
Wie jetzt? Bei mir funktioniert er nicht. Wo hast Du ihn eingefügt? In Module 1, oder einfach auf die Seite Fahrtenbuch?
Hast Du was angepasst?

Bei mir kommt die oben genannte Fehlermeldung:

"BASIC-Syntaxfehler. Unbekannter Datentyp Range."

MfG
minbari

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Bitte löschen!

Beitrag von mikele » Mo 16. Sep 2024, 14:07

Hallo,
das Excel-Makro habe ich nicht geprüft (es müsste dafür auf alle Falle der vbasupport eingeschaltet werden). Mein Test bezog sich auf dein Makro:

Code: Alles auswählen

Sub SortiereBereich
Dim SortProps(2) As new com.sun.star.beans.PropertyValue
Dim SortFeld(0) As new com.sun.star.table.TableSortField

oDatei = ThisComponent
oSheet = oDatei.Sheets(0)
oBereich = oSheet.getCellRangeByName("B7:F4000")

SortFeld(0).Field = 0
SortFeld(0).IsAscending = True
SortFeld(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC

SortProps(0).Name = "SortFields"
SortProps(0).Value = SortFeld()
SortProps(1).Name = "SortColumns"
SortProps(1).Value = False
SortProps(2).Name = "ContainsHeader"
SortProps(2).Value = true
oBereich.Sort(SortProps())
End Sub
Gruß,
mikele

minbari
Beiträge: 49
Registriert: So 25. Aug 2024, 17:35

Re: Bitte löschen!

Beitrag von minbari » Di 17. Sep 2024, 18:17

Hmm, bei mir funktioniert der Code nicht. Es gibt zwar keine Fehlermeldung, es wird aber nichts sortiert.
Hast Du was verändert / angepasst?
Wo hast Du den Code eingefügt?

MfG
minbari

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Bitte löschen!

Beitrag von mikele » Di 17. Sep 2024, 21:26

Hallo,
nö - ich habe das Makro so wie es ist in dein Fahrtenbuch kopiert, an eine Schaltfläche gebunden (der Einfachheit halber) fertig.
Dateianhänge
Fahrtenbuch Neu Libre Ano.ods
(19.94 KiB) 309-mal heruntergeladen
Gruß,
mikele

minbari
Beiträge: 49
Registriert: So 25. Aug 2024, 17:35

Re: Bitte löschen!

Beitrag von minbari » Mi 18. Sep 2024, 14:22

Ich habs...!

Tatsächlich hat der Code mit der extra Schaltfläche funktioniert. Ich musste ihn ein wenig anpassen, weil die erste Zeile nicht mitsortiert wurde.
Nach ein wenig grübeln habe ich den Code so verändert, dass er mit Drücken der Taste "Eintragen" funktioniert - also ohne extra Taste. Und läuft! :D

Ein riesiges Dankeschön!

Der funktionierende Code sieht jetzt so aus:

Code: Alles auswählen

REM  *****  BASIC  *****

Dim odialog as object, oTab as object
Dim n as integer 'aktuelle Zeile


Sub Main
	'Zugriff auf Dokument
	oDoc=ThisComponent	
	'aktuelle Tabelle
	oTab=oDoc.CurrentController.ActiveSheet
	'Bestimme letzte benutzte Zelle
	oCur=oTab.createCursor
	oCur.gotoEndOfUsedArea(False)
	n=oCur.rangeaddress.startrow+1
	'Zugriff auf Dialog
	DialogLibraries.loadLibrary( "Standard")
	oLib = DialogLibraries.getByName("Standard")
	oDialog = CreateUnoDialog(oLib.getByName("Dialog1"))
	'Setze aktuelles Datum
	octrdate=odialog.getcontrol("DateField1")
	octrdate.date=cdatetounodate(now())
	'Starte Dialog
	x=oDialog.execute
End Sub

sub uebernehmen
	octrdate=odialog.getcontrol("DateField1")
	octrzweck=odialog.getcontrol("ListBox4")
	octrfahrzeug=odialog.getcontrol("ListBox1")
	octrbegleit=odialog.getcontrol("ListBox2")
	octrbemerk=odialog.getcontrol("ListBox5")
	oTab.getcellbyposition(1,n).value=CDateFromUnoDate(octrdate.date)
	oTab.getcellbyposition(2,n).string=octrzweck.SelectedItem
	oTab.getcellbyposition(3,n).string=octrfahrzeug.SelectedItem
	oTab.getcellbyposition(4,n).string=octrbegleit.SelectedItem
	oTab.getcellbyposition(5,n).string=octrbemerk.SelectedItem
	'Zeilenzähler erhöhen
	n=n+1
	'Dialog schliessen
	x=oDialog.endexecute
    'Bereich nach Datum sortieren
Dim SortProps(2) As new com.sun.star.beans.PropertyValue
Dim SortFeld(0) As new com.sun.star.table.TableSortField

    oDatei = ThisComponent
    oSheet = oDatei.Sheets(0)
    oBereich = oSheet.getCellRangeByName("B6:F4000")

    SortFeld(0).Field = 0
    SortFeld(0).IsAscending = True
    SortFeld(0).FieldType = com.sun.star.util.SortFieldType.AUTOMATIC

    SortProps(0).Name = "SortFields"
    SortProps(0).Value = SortFeld()
    SortProps(1).Name = "SortColumns"
    SortProps(1).Value = False
    SortProps(2).Name = "ContainsHeader"
    SortProps(2).Value = true
    oBereich.Sort(SortProps())
End Sub


Jetzt bin ich beim Thema eingetragene Zellen / Zeilen mit Knopfdruck automatisch mit Rahmen versehen.

Dies klappt noch nicht. Er rahmt jetzt genau eine Zeile B8-F8. Das war es.
Mit jedem Eintrag verändert sich die Zeile natürlich. Wie ich das erreiche, weiß ich momentan nicht.

Folgenden Code habe ich versucht:

Code: Alles auswählen

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

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$8:$F$8"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(12) as new com.sun.star.beans.PropertyValue
args2(0).Name = "OuterBorder.LeftBorder"
args2(0).Value = Array(0,0,26,0,0,26)
args2(1).Name = "OuterBorder.LeftDistance"
args2(1).Value = 0
args2(2).Name = "OuterBorder.RightBorder"
args2(2).Value = Array(0,0,26,0,0,26)
args2(3).Name = "OuterBorder.RightDistance"
args2(3).Value = 0
args2(4).Name = "OuterBorder.TopBorder"
args2(4).Value = Array(0,0,26,0,0,26)
args2(5).Name = "OuterBorder.TopDistance"
args2(5).Value = 0
args2(6).Name = "OuterBorder.BottomBorder"
args2(6).Value = Array(0,0,26,0,0,26)
args2(7).Name = "OuterBorder.BottomDistance"
args2(7).Value = 0
args2(8).Name = "InnerBorder.Horizontal"
args2(8).Value = Array(0,0,26,0,0,26)
args2(9).Name = "InnerBorder.Vertical"
args2(9).Value = Array(0,0,26,0,0,26)
args2(10).Name = "InnerBorder.Flags"
args2(10).Value = 0
args2(11).Name = "InnerBorder.ValidFlags"
args2(11).Value = 127
args2(12).Name = "InnerBorder.DefaultDistance"
args2(12).Value = 0

dispatcher.executeDispatch(document, ".uno:SetBorderStyle", "", 0, args2())
'Zeilenzähler erhöhen
	n=n+1

end sub


minbari

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Bitte löschen!

Beitrag von mikele » Mi 18. Sep 2024, 15:39

Hallo,
aufgrund deiner Formatierungen habe ich zwei Zellvorlagen erstellt: "umrandet" und "umrandet_datum"
Wird nun ein neuer Eintrag erstellt, wird in der neuen Zeile der Spalte B die Vorlage "umrandet_datum" zugewiesen und den Spalten E-F die Vorlage "umrandet". Willst du später mal am Aussehen feilen, brauchst du nur die Vorlage abändern ...
Dateianhänge
Fahrtenbuch Neu Libre Ano.ods
(21.66 KiB) 134-mal heruntergeladen
Gruß,
mikele

minbari
Beiträge: 49
Registriert: So 25. Aug 2024, 17:35

Re: Bitte löschen!

Beitrag von minbari » Do 19. Sep 2024, 11:41

Hammer, das ist schon fast die Lösung.

Eine Sache ist mir aufgefallen:

- wenn ich den Code 1:1 in meine nichtanonymisierte Tabelle kopiere, funktioniert der Rahmen nicht.
Warum auch immer, einfach unglaublich.

Das ist aber alles schon ganz dicht dran, ich danke Dir für die Hilfe!

minbari
Zuletzt geändert von minbari am Do 19. Sep 2024, 12:22, insgesamt 1-mal geändert.

Mondblatt24
* LO-Experte *
Beiträge: 3345
Registriert: Fr 3. Mär 2017, 17:12

Re: Bitte löschen!

Beitrag von Mondblatt24 » Do 19. Sep 2024, 11:44

Hallo,
@ minbari,
Was ist Bitte löschen überhaupt für ein Thema?
Kannst du das bitte ändern?
Win 11 (x64) ▪ LO 25.2.5.1 (x64) ▪ AOO Portable 4.1.15
Wenn Eure Frage zutreffend beantwortet wurde, seid so nett und fügt dem Betreff der Eingangsfrage [GELÖST] hinzu.

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Eingabemaske für Calc-Tabelle

Beitrag von mikele » Do 19. Sep 2024, 12:49

Hallo,
funktioniert der Rahmen nicht
das wird daran liegen, dass in deiner Datei die Zellvorlagen nicht exisitieren, die ich angelegt und genutzt habe.
Gehe dazu in deine Datei und lass' dir die mit F11 die Vorlagen anzeigen. Gehe in die Zelle B7 (wo das Datum steht) und wähle bei den Formatvorlagen (oben rechts) die Option "Neue Formatvorlage aus Auswahl ..." und gib ihr den Namen "umrandet_datum". Dann gehst du in die Zelle C7 und erstellst eine Vorlage namens "umrandet".
Um dich besser in das Vorlagenkonzept einzulesen (das unter LibreOffice unheimlich mächtig ist):
https://help.libreoffice.org/latest/de/ ... 00000.html
Gruß,
mikele

minbari
Beiträge: 49
Registriert: So 25. Aug 2024, 17:35

Re: Eingabemaske für Calc-Tabelle

Beitrag von minbari » Do 19. Sep 2024, 20:54

Das ist der Hammer!
Es funktioniert! Du hast mir riesig geholfen!

Eine Sache hätte ich noch:

Diese Tabelle wird eine Jahrestabelle mit ca 3000-4000 Einträgen werden.
Da die Einträge unten angefügt werden, ist es möglich, die Ansicht immer auf den letzten Eintrag zu zentrieren?
Ansonsten müsste man nach ein paar Wochen erstmal ne Menge scrollen.

Unter Excel hatte ich es so gelöst:

Code: Alles auswählen

ActiveWindow.ScrollRow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row - 3


Funktioniert natürlich unter Libre nicht.

Danke für die Hilfe!!!
minbari


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten