Makro aktuelles Datum
Moderator: Moderatoren
Makro aktuelles Datum
Hallo OO-Experten,
seit kurzer Zeit muss ich mit Calc und Writer arbeiten (davor Excel + Word) und bin dabei, eine Menge "umzustricken".
Meine Bitte: Wie muss ein Makro aussehen, damit beim Öffnen einer Calc-Tabelle der Cursor in die Zelle mit dem aktuellen Datum springt?
Ich hab schon kräftig gesucht, aber nix gefunden.
Danke schon mal im voraus!
seit kurzer Zeit muss ich mit Calc und Writer arbeiten (davor Excel + Word) und bin dabei, eine Menge "umzustricken".
Meine Bitte: Wie muss ein Makro aussehen, damit beim Öffnen einer Calc-Tabelle der Cursor in die Zelle mit dem aktuellen Datum springt?
Ich hab schon kräftig gesucht, aber nix gefunden.
Danke schon mal im voraus!
Sorry, die Antwort als "Gast" kam nur zustande, weil das Login schief ging. Zur Verdeutlichung: Bei dieser Tabelle befindet sich in Spalte A das Datum im Format TTT TT.MM.JJ. In den Spaltenüberschriften B, C, D usw. sind Namen von Mitarbeitern. Das Ganze ist eine Abwesenheitsliste, die der eingetragen wird, wann jemand krank ist, Urlaub hat usw.
Wie gesagt, beim Öffnen der Datei soll die Zelle mit dem aktuellen Datum markiert sein.
Gruß BMWBiker[/quote]
Wie gesagt, beim Öffnen der Datei soll die Zelle mit dem aktuellen Datum markiert sein.
Gruß BMWBiker[/quote]
Binde das folgende Makro als Auto-open-makro in das Dokument ein und ändere die Ausdrücke "Tabelle1" im Makro auf den Namen der Tabelle welche geprüft werden soll:
Gruß
Stephan
Code: Alles auswählen
Sub Main
oCellCursor = ThisComponent.Sheets().getByName("Tabelle1").createCursor()
oCellCursor.GotoEndOfUsedArea(True)
i = 0
Do
a = ThisComponent.Sheets().getByName("Tabelle1").getCellByPosition(0,i).FormulaLocal
if i > oCellCursor.getRangeAddress.EndRow then
msgbox "Das aktuelle Datum wurde nicht gefunden"
exit sub
end if
i=i+1
Loop while a <> date
oCell = ThisComponent.Sheets().getByName("Tabelle1").getCellByPosition(0,i-1)
ThisComponent.GetCurrentController.select(oCell)
oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
ThisComponent.CurrentController.Select(oRanges)
End Sub
Gruß
Stephan
@ Stephan: Vielen Dank! Das Makro funktioniert, allerdings nicht schon beim Öffnen der Datei, sondern erst über Extras|Makros|Makro|ausführen.
Das Makro habe ich im Modul1 der Datei gespeichert.
Bei Excel ist der Begriff auto_open mit der eindeutigen Funktion verbunden, das Makro beim Öffnen der Datei auszuführen. Gibt es so etwas bei Calc ebenfalls?
Gruß BMWBiker
Das Makro habe ich im Modul1 der Datei gespeichert.
Bei Excel ist der Begriff auto_open mit der eindeutigen Funktion verbunden, das Makro beim Öffnen der Datei auszuführen. Gibt es so etwas bei Calc ebenfalls?
Gruß BMWBiker
UNter Extras>Anpassen Register Ereignisse dem Ereignis Dokument öffnen zuordnen.
Darauf achten das obeb rechts Dokument und nicht OOo aktiviert ist sonst startet das Makro bei jedem x-belibigen Dokument (im Speziellen geht das natürlich nicht weil Dein Makro in der Dokumentbibliothek ist, ist als nur ein Hinweis falls Du mal später die OOo-Bibliotheken verwenden willst).
Gruß
Stephan
Darauf achten das obeb rechts Dokument und nicht OOo aktiviert ist sonst startet das Makro bei jedem x-belibigen Dokument (im Speziellen geht das natürlich nicht weil Dein Makro in der Dokumentbibliothek ist, ist als nur ein Hinweis falls Du mal später die OOo-Bibliotheken verwenden willst).
Gruß
Stephan
Hey Lutz,
Dann zur sprachlichen Genauigkeit: Ich nehme an, deine Datei heisst "Stundenbuch", nicht deine Tabelle? Und diese Datei hat diverse Tabellen (oder Tabellenblätter) mit Namen "Januar", Februar"....?
Das Makro erwartet einen Tabellennamen "Tabelle1" (der Standardname der ersten Tabelle einer neuen Datei). Hast du diese nicht mehr, wird das Makro nicht laufen. Ersetz den Namen halt durch einen existierenden, zum Beispiel "Januar". Dann sollte es gehen.
Gruss
Thomas
Beim Posten von Fehlermeldungen ist es immer hilfreich, auch die Zeile im Basic-Code mit zu posten, welche die Fehlermeldung auslöst. Die ist markiert in der Basic-IDE, die sich mit der Fehlermeldung öffnet!.ch habe das Makro eingebunden, nehme ich jedenfalls an. Beim öffnen der Tabelle mit Namen"Stundenbuch" kommt aber eine Fehlermeldung:
Basic-Laufzeitfehler Es ist eine Exception aufgetreten Type:com.sun.star.container.NoSuchElementException Message: .
Die Tabelle besteht aus mehreren Blättern, Januar,Februar usw. liegt es daran?
Dann zur sprachlichen Genauigkeit: Ich nehme an, deine Datei heisst "Stundenbuch", nicht deine Tabelle? Und diese Datei hat diverse Tabellen (oder Tabellenblätter) mit Namen "Januar", Februar"....?
Das Makro erwartet einen Tabellennamen "Tabelle1" (der Standardname der ersten Tabelle einer neuen Datei). Hast du diese nicht mehr, wird das Makro nicht laufen. Ersetz den Namen halt durch einen existierenden, zum Beispiel "Januar". Dann sollte es gehen.
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 Lutz,
na ja, wie ich sagte: Offensichtlich hast du kein Tabellenblatt, das "Stundenbuch" heisst. Oder?
Da muss der Name eines Tabellenblattes stehen, so wie du ihn unten auf dem Reiter ablesen kannst (exakte Schreibweise).
Gruss
Thomas
na ja, wie ich sagte: Offensichtlich hast du kein Tabellenblatt, das "Stundenbuch" heisst. Oder?
Da muss der Name eines Tabellenblattes stehen, so wie du ihn unten auf dem Reiter ablesen kannst (exakte Schreibweise).
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 Lutz,
bitte tue mir einen Gefallen: Kopiere den Makrocode und poste ihn hier. Das Suchen in Bildern ist Mühsam und ich habe keine Lust, den Code abzutippen.
Noch etwas: Was steht denn in den jeweiligen Zellen drin ( A36 bsp) - nicht das angezeigte Datatum, sondern die Formel - falls überhaupt?
Meiner Ansicht wird die Bedingung nämlich a <> date nicht erfüllt - daher die Fehlermeldung.
Aber - gib mal weitere Details.
Gruss
Thomas
bitte tue mir einen Gefallen: Kopiere den Makrocode und poste ihn hier. Das Suchen in Bildern ist Mühsam und ich habe keine Lust, den Code abzutippen.
Noch etwas: Was steht denn in den jeweiligen Zellen drin ( A36 bsp) - nicht das angezeigte Datatum, sondern die Formel - falls überhaupt?
Meiner Ansicht wird die Bedingung nämlich a <> date nicht erfüllt - daher die Fehlermeldung.
Aber - gib mal weitere Details.
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
Morgen Lutz,
So, jetzt hab ich den Code mal getestet. Wo hast du den eigentlich her? Meiner Ansicht hat der so nie funktioniert.
Diese Zeile muss auf jeden Fall heissen:
Mit "FormularLocal" erhälst du die Formel, die in der Zelle steht - und die ist nie identisch mit dem weiter untern erzeugten aktuellen Datum (date).
Mit Value erhälst du den Zellinhalt in seiner internen Darstellung - der kann identisch sein, wenn wirklich nur das Datum drin steht (ich hab es mit jetzt() getestet).
Das Ergebnis des Makros ist, dass die Zele mit dem heutigen Datum selektiert ist - die letzten beiden Zeilen
geben meiner Ansicht keinen Sinn mehr (und bewirken auch nichts), könnest du also weglassen.
Oder was sollte damit erreicht werden?
Na ja, wie gesagt, soweit geht das erst mal, für weitere Fragen sind wir da.
Gruss
Thomas
keine Sorge, warum sollte ich dich anschreien?du kannst mich auch anschreien wenn ich es nicht kapier...
So, jetzt hab ich den Code mal getestet. Wo hast du den eigentlich her? Meiner Ansicht hat der so nie funktioniert.
Code: Alles auswählen
a = ThisComponent.Sheets().getByName("Januar").getCellByPosition(0,i).FormulaLocal
Code: Alles auswählen
a = ThisComponent.Sheets().getByName("Januar").getCellByPosition(0,i).value
Mit Value erhälst du den Zellinhalt in seiner internen Darstellung - der kann identisch sein, wenn wirklich nur das Datum drin steht (ich hab es mit jetzt() getestet).
Das Ergebnis des Makros ist, dass die Zele mit dem heutigen Datum selektiert ist - die letzten beiden Zeilen
Code: Alles auswählen
oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
ThisComponent.CurrentController.Select(oRanges)
Oder was sollte damit erreicht werden?
Na ja, wie gesagt, soweit geht das erst mal, für weitere Fragen sind wir da.
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 Lutz,
hmm, wo ist dein Bild? War da nicht irgendwie noch ein Link zu der Datei?
Also, soweit ich mich erinnere, stand in den oberen Reihen nix?
Na egal, wie gesagt, ich denke, es liegt auch an den Datumswerten. Mir fehlen zu viel Hintergrund-Informationen.
Ändere mal die folgende Zeile:
in
und ergänz mal ganz am Anfang den die folgende Zeile:
Jetzt sind zumindest die Zahlenformate identisch - die Schleife sollte funktionieren. (bei mir tut sie es, aber ich hab nur eine Testdatei....)
Gruss
Thomas
hmm, wo ist dein Bild? War da nicht irgendwie noch ein Link zu der Datei?
Also, soweit ich mich erinnere, stand in den oberen Reihen nix?
Na egal, wie gesagt, ich denke, es liegt auch an den Datumswerten. Mir fehlen zu viel Hintergrund-Informationen.
Ändere mal die folgende Zeile:
Code: Alles auswählen
Loop while a <> date
Code: Alles auswählen
Loop while a <> Fix(DateValue(date))
Code: Alles auswählen
dim a as double
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
Hallo Lutz,
(nicht getestet - könnten also noch Fehler drin sein.))
Warum bei dir der 28. November angezeigt wird, weiss ich aber auch nicht so . Systemdatum verstellt?
Aber, es ist ok, wenn du mir die Datei zusendest. Dann kann ich draufschauen.
Bitte im Anschreiben bestätigen, dass kein "schadlicher Code" drin ist!
meine mail-Adresse: thomaskrumbein(at)openoffice.org
Viele Grüße
Thomas
Hmm, das kannst du mit einer zusätzliche Schleife lösen - bevor das jetzige Programm losläuft:Was muss eingegeben werden dass, das Makro die Tabellenblätter von "Januar-Dezember" durchsucht? sonst müsste ich ja das Makro jeden Monat ändern.
Code: Alles auswählen
dim aMonate()
dim flag as boolean
aMonate = Array("Januar", "Februar", "märz") 'Na ja, kannst du selber weiter aufüllen
for m=0 to 11 '12 Monate, wenn nicht, Werte entsprechenc anpassen
oCellCursor = ThisComponent.Sheets().getByName(aMonate(m)).createCursor()
'...
' Überall, wo bisher ein Monat stand, ersetzen durch aMonate(m)
'....
if i > oCellCursor.getRangeAddress.EndRow then
' die zeile kommt raus
flag = false ' die rein
exit Do
end if
flag = true
i = i+1
loop while a<> fix(dateValue(date))
if flag then exit for
next
oCell = ThisComponent.Sheets().getByName(aMonate(m)).getCellByPosition(0,i-1)
ThisComponent.GetCurrentController.select(oCell)
End sub
Warum bei dir der 28. November angezeigt wird, weiss ich aber auch nicht so . Systemdatum verstellt?
Aber, es ist ok, wenn du mir die Datei zusendest. Dann kann ich draufschauen.
Bitte im Anschreiben bestätigen, dass kein "schadlicher Code" drin ist!
meine mail-Adresse: thomaskrumbein(at)openoffice.org
Viele Grüße
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
Hallo Lutz,
also, das Makro war schon ok, hättest du es richtig abgetippt
OK, ich hatte nur geänderte Zeilen gepostet - und vielleicht nicht immer klar genug. Aber egal, hier das (funktionstüchtige) kompwette Makro:
Ich hab es gleich einmal ein wenig gekürzt und optimiert.
Einen Fehler jedoch habe ich auch lange gesucht.... Wo hatest du die Tabelle ursprünglich her?
Dort steht nämlich tatsächlich als Kalkulationsdatum in den Optionen der 01.01.1900 und nicht - wie üblich - der 30.12.1899. Also muss ein Korrekturfaktor von 2 (zwei Tagen) eingebracht werden, damit es wieder stimmt.
Soweit ok, jetzt sollte es funktionieren (bei mir geht es jedenfalls
)
Viele Grüße
Thomas
also, das Makro war schon ok, hättest du es richtig abgetippt

OK, ich hatte nur geänderte Zeilen gepostet - und vielleicht nicht immer klar genug. Aber egal, hier das (funktionstüchtige) kompwette Makro:
Code: Alles auswählen
Sub Datum
dim aMonate()
dim flag as boolean
aMonate = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
for m = 0 to 11
oCellCursor = ThisComponent.Sheets().getByName(aMonate(m)).createCursor()
oCellCursor.GotoEndOfUsedArea(True)
i = 0
Do
oCell = ThisComponent.Sheets().getByName(aMonate(m)).getCellByPosition(0,i)
a = oCell.value
if i > oCellCursor.getRangeAddress.EndRow then
flag = false
exit Do
end if
flag = true
i = i+1
loop while a<> fix(dateValue(date)-2) 'die -2 ist der Korrekturfaktor zur internen Berechnung
if flag then exit for
next
if not flag then
msgbox "Das aktuelle Datum wurde nicht gefunden"
exit sub
end if
ThisComponent.GetCurrentController.select(oCell)
End Sub
Einen Fehler jedoch habe ich auch lange gesucht.... Wo hatest du die Tabelle ursprünglich her?
Dort steht nämlich tatsächlich als Kalkulationsdatum in den Optionen der 01.01.1900 und nicht - wie üblich - der 30.12.1899. Also muss ein Korrekturfaktor von 2 (zwei Tagen) eingebracht werden, damit es wieder stimmt.
Soweit ok, jetzt sollte es funktionieren (bei mir geht es jedenfalls

Viele Grüße
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
Hallo,
ich bin erstaunt, wie komplex das in OpenOffice ist,
in Excel hatte ich dafür immer nur einen 3-Zeiler benötigt.
Vielleicht kann das einer von Euch in OpenOffice umsetzen:
Grüße,
Josef Sterk
ich bin erstaunt, wie komplex das in OpenOffice ist,
in Excel hatte ich dafür immer nur einen 3-Zeiler benötigt.
Vielleicht kann das einer von Euch in OpenOffice umsetzen:
Code: Alles auswählen
'----------------------------------------------------------------------------
' Sprung in Tabelle und Zelle des jeweiligen Tagesdatums
' Tabellen sind Januar, Februar, Maerz, April, ...
' Die Tage jeden Monats sind jeweils ab Zelle A2 abwärts aufgereiht
' -----------------------------------------------------------------------------
ThisWorkbook.Worksheets(Month(Date)).Activate
Range("A1").Select
ActiveCell.offset(Day(Date), 1).Select
Josef Sterk