Discussion:
[OOo Calc]Feld mit aktuellem Datum per Makro anspringen
(zu alt für eine Antwort)
Michael Ottenbruch
2020-06-06 11:22:08 UTC
Permalink
Hallo, Leute!

Ich arbeite in OpenOffice Calc mit einem selbst geschriebenen
Haushaltsbuch (ich weiß: "Rad neu erfinden usw."). Es tut ziemlich genau
das was ich will. Neue Daten füge ich am Ende an und sortiere sie dann
per Makro bsplsw. nach dem Datum in die Tabelle ein. Das funktioniert
auch prächtig, obwohl ich von Open Office Basic bzw. Makros nicht viel
verstehe. Allerdings ist nach dem Sortieren die aktive Zelle die erste
des Sortierbereichs, also unmittelbar unter dem Tabellenkopf.

Ich würde gerne in die letzte (gemeint: unterste) Zelle einer bestimmten
sortierten Spalte springen, die ein Datum kleiner oder gleich dem
aktuellen Tagesdatum enthält. Wahrscheinlich stehe ich einfach nur auf
dem Schlauch, aber finde keinen Ansatzpunkt für die Umsetzung in ein
Makro.

Bisher habe ich Folgendes zuwege gebracht:

Ich habe in Feld I1 die Formel "=HEUTE()" eingegeben. Das ergibt heute
"06.06.20" In Feld K1 habe ich die Formel "=VERGLEICH(I1;B5:B518)"
eingegeben. Das sollte laut Hilfe die Zellen B5 bis B518 (also Spalte B)
nach diesem Wert durchsuchen ("Liefert die relative Position eines
Elements in einer Matrix, das mit einem angegebenen Wert übereinstimmt.
Die Funktion liefert die Position des in "Suchmatrix" gefundenen Werts
in Form einer Zahl. [...] Sobald dieser Wert gefunden ist, wird die
Nummer der Zeile, in der der Wert gefunden wurde, zurückgegeben. Wenn
beim Suchen in der Spalte ein höherer Wert gefunden wird, wird die
Nummer der vorhergehenden Zeile zurückgegeben.") In diesem Fall enthält
Zelle B369 den Wert "05.06.20", B370 den Wert "08.06.20". Die Funktion
in K1 gibt den Wert "365" aus, was durchaus der "relative[n] Postion
[des] Feldes in [der] Matrix" entspricht, sofern das niedrigste Feld der
Matrix als "1" gezählt wird. Einigermaßen folgerichtig ergibt die
Eingabe der Funktion "=VERSCHIEBUNG(B5;K1-1;0)" in Zelle K2 die Ausgabe
"05.06.20" (hier scheint die Zählung des Offsets mit "0" zu beginnen,
weswegen wohl 1 abgezogen werden muß).

Zusammenfassen läßt sich das Ganze zu einer einzigen Formel:
"=VERSCHIEBUNG(B5;VERGLEICH(HEUTE();B5:B518)-1;0)", die dann als
Ergebnis wiederum "05.06.20" auswirft, ohne andere Bezüge als die auf
die durchsuchte Spalte zu enthalten.

Mit welchem Makro-Befehl kann ich aber nun in diese Zelle, die hier das
Argument der Funktion VERSCHIEBUNG ist, springen?

Zusatzfrage: Verändert dieser Makrobefehl automatisch seine Parameter
(also den durchsuchten Bereich in Spalte B, hier "B5:B518"), wenn ich
Zeilen zwischen Zeile 5 und Zeile 518 einfüge? Die Makros die ich bisher
benutze, springen zum letzten Datenfeld (beim Aufzeichnen des Makros
habe ich die Tastenkombination <STRG>-<ENDE> verwendet), markieren von
dort aus einen Bereich (Tastenkombination <SHIFT>-<STRG>-<POS1> und 4 x
<SHIFT>-<CURSOR-DOWN>) und sortieren diesen dann. Das funktioniert
automatisch weiter bei Vergrößerung des Datenbereiches.

Falls nein: Gibt es eine Funktion, die höchste belegte Zelle in einer
Spalte ausgibt und die ich in obiger Formel also anstatt "B518" eingeben
könnte?

TIA
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
Michael Ottenbruch
2020-06-09 08:08:46 UTC
Permalink
Nachtrag, ausnahmsweise mal als TOFU:

Ich bin mittlerweile so weit, daß ich herausgefunden habe, daß ich ganz
simpel in eine beliebige Zelle die Formel

=ADRESSE(SUMME(VERGLEICH(HEUTE();B5:B518);4);2)

eintragen kann und diese Zelle dann als Ergebnis die Adresse enthält,
die ich anspringen möchte, in diesem Fall bsplsw. "$B$377".

Ich müßte also nur noch wissen, wie ich in einem Makro genau diese Zelle
anspringen kann.
Post by Michael Ottenbruch
Hallo, Leute!
Ich arbeite in OpenOffice Calc mit einem selbst geschriebenen
Haushaltsbuch (ich weiß: "Rad neu erfinden usw."). Es tut ziemlich genau
das was ich will. Neue Daten füge ich am Ende an und sortiere sie dann
per Makro bsplsw. nach dem Datum in die Tabelle ein. Das funktioniert
auch prächtig, obwohl ich von Open Office Basic bzw. Makros nicht viel
verstehe. Allerdings ist nach dem Sortieren die aktive Zelle die erste
des Sortierbereichs, also unmittelbar unter dem Tabellenkopf.
Ich würde gerne in die letzte (gemeint: unterste) Zelle einer bestimmten
sortierten Spalte springen, die ein Datum kleiner oder gleich dem
aktuellen Tagesdatum enthält. Wahrscheinlich stehe ich einfach nur auf
dem Schlauch, aber finde keinen Ansatzpunkt für die Umsetzung in ein
Makro.
Ich habe in Feld I1 die Formel "=HEUTE()" eingegeben. Das ergibt heute
"06.06.20" In Feld K1 habe ich die Formel "=VERGLEICH(I1;B5:B518)"
eingegeben. Das sollte laut Hilfe die Zellen B5 bis B518 (also Spalte B)
nach diesem Wert durchsuchen ("Liefert die relative Position eines
Elements in einer Matrix, das mit einem angegebenen Wert übereinstimmt.
Die Funktion liefert die Position des in "Suchmatrix" gefundenen Werts
in Form einer Zahl. [...] Sobald dieser Wert gefunden ist, wird die
Nummer der Zeile, in der der Wert gefunden wurde, zurückgegeben. Wenn
beim Suchen in der Spalte ein höherer Wert gefunden wird, wird die
Nummer der vorhergehenden Zeile zurückgegeben.") In diesem Fall enthält
Zelle B369 den Wert "05.06.20", B370 den Wert "08.06.20". Die Funktion
in K1 gibt den Wert "365" aus, was durchaus der "relative[n] Postion
[des] Feldes in [der] Matrix" entspricht, sofern das niedrigste Feld der
Matrix als "1" gezählt wird. Einigermaßen folgerichtig ergibt die
Eingabe der Funktion "=VERSCHIEBUNG(B5;K1-1;0)" in Zelle K2 die Ausgabe
"05.06.20" (hier scheint die Zählung des Offsets mit "0" zu beginnen,
weswegen wohl 1 abgezogen werden muß).
"=VERSCHIEBUNG(B5;VERGLEICH(HEUTE();B5:B518)-1;0)", die dann als
Ergebnis wiederum "05.06.20" auswirft, ohne andere Bezüge als die auf
die durchsuchte Spalte zu enthalten.
Mit welchem Makro-Befehl kann ich aber nun in diese Zelle, die hier das
Argument der Funktion VERSCHIEBUNG ist, springen?
Zusatzfrage: Verändert dieser Makrobefehl automatisch seine Parameter
(also den durchsuchten Bereich in Spalte B, hier "B5:B518"), wenn ich
Zeilen zwischen Zeile 5 und Zeile 518 einfüge? Die Makros die ich bisher
benutze, springen zum letzten Datenfeld (beim Aufzeichnen des Makros
habe ich die Tastenkombination <STRG>-<ENDE> verwendet), markieren von
dort aus einen Bereich (Tastenkombination <SHIFT>-<STRG>-<POS1> und 4 x
<SHIFT>-<CURSOR-DOWN>) und sortieren diesen dann. Das funktioniert
automatisch weiter bei Vergrößerung des Datenbereiches.
Falls nein: Gibt es eine Funktion, die höchste belegte Zelle in einer
Spalte ausgibt und die ich in obiger Formel also anstatt "B518" eingeben
könnte?
TIA
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
n***@efbe.prima.de
2020-06-09 09:40:36 UTC
Permalink
Post by Michael Ottenbruch
Ich bin mittlerweile so weit, daß ich herausgefunden habe, daß ich ganz
simpel in eine beliebige Zelle die Formel
=ADRESSE(SUMME(VERGLEICH(HEUTE();B5:B518);4);2)
Wenn b5:b518 als benannter Bereich festgelegt wird, passt der sich
automatisch an bei Zeilen einfügen/löschen.
Post by Michael Ottenbruch
eintragen kann und diese Zelle dann als Ergebnis die Adresse enthält,
die ich anspringen möchte, in diesem Fall bsplsw. "$B$377".
Ich müßte also nur noch wissen, wie ich in einem Makro genau diese Zelle
anspringen kann.
Da sollte die uno Doku helfen.

https://wiki.documentfoundation.org/Development/DispatchCommands

Für ein WriterDokument kann ich dir das Anspringen einer anderen *Seite*
per Macro schicken.

CU
Frank
Michael Ottenbruch
2020-06-09 11:28:24 UTC
Permalink
Post by n***@efbe.prima.de
Post by Michael Ottenbruch
Ich bin mittlerweile so weit, daß ich herausgefunden habe, daß ich ganz
simpel in eine beliebige Zelle die Formel
=ADRESSE(SUMME(VERGLEICH(HEUTE();B5:B518);4);2)
Wenn b5:b518 als benannter Bereich festgelegt wird, passt der sich
automatisch an bei Zeilen einfügen/löschen.
Post by Michael Ottenbruch
eintragen kann und diese Zelle dann als Ergebnis die Adresse enthält,
die ich anspringen möchte, in diesem Fall bsplsw. "$B$377".
Ich müßte also nur noch wissen, wie ich in einem Makro genau diese Zelle
anspringen kann.
Da sollte die uno Doku helfen.
https://wiki.documentfoundation.org/Development/DispatchCommands
Ich finde da ein Kommando ".uno:GoToCell".

Ich habe - wie erwähnt - von Makro-Programmierung keine Ahnung. Ich kann
ein Makro aufzeichnen und "abspielen", und das war es auch schon. Ich
hatte mir bisher eingebildet, die verwendete Makro-Sprache sei
"OpenOffice Basic", aber es handelt sich wohl um eine Sprache namens
"uno". Wieder was gelernt.

Wenn ich mir jedenfalls den Quelltext meiner bisher aufgezeichneten
Post by n***@efbe.prima.de
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$C$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
Dieser Block springt zur Zelle "$C$2". Wenn mir jetzt jemand netterweise
sagen könnte, wie ich anstatt zu einer absolut beschriebenen Zelle zu
einer Zelle springen kann, deren Adresse in einer anderen Zelle steht,
dann wäre mein Problem gelöst.
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
K_R
2020-06-09 14:04:11 UTC
Permalink
Post by n***@efbe.prima.de
Post by Michael Ottenbruch
Ich bin mittlerweile so weit, daß ich herausgefunden habe, daß ich ganz
simpel in eine beliebige Zelle die Formel
=ADRESSE(SUMME(VERGLEICH(HEUTE();B5:B518);4);2)
Wenn b5:b518 als benannter Bereich festgelegt wird, passt der sich
automatisch an bei Zeilen einfügen/löschen.
Post by Michael Ottenbruch
eintragen kann und diese Zelle dann als Ergebnis die Adresse enthält,
die ich anspringen möchte, in diesem Fall bsplsw. "$B$377".
Ich müßte also nur noch wissen, wie ich in einem Makro genau diese Zelle
anspringen kann.
Wenn Du es hinbekommst, dass in deiner Zelle das Ziel in der Form z.B.
A20 steht dann setzt dieses Makro den sichtbaren Cursor (in Basic gibt
es auch einen unsichtbaren Cursor) nach A20


Gruss Klaus

sub GotoPosition
myDoc = thisComponent
mysheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(0,0)
Rem Lese A1 aus (nicht verwirren lassen Zählung beginnt bei 0)
MeinePosition=mycell.string
myView = myDoc.CurrentController
mycell = mysheet.getCellRangeByName(MeinePosition)
myView.Select(mycell)
end sub
Michael Ottenbruch
2020-06-09 18:36:02 UTC
Permalink
Post by K_R
Post by n***@efbe.prima.de
Post by Michael Ottenbruch
Ich bin mittlerweile so weit, daß ich herausgefunden habe, daß ich ganz
simpel in eine beliebige Zelle die Formel
=ADRESSE(SUMME(VERGLEICH(HEUTE();B5:B518);4);2)
Wenn b5:b518 als benannter Bereich festgelegt wird, passt der sich
automatisch an bei Zeilen einfügen/löschen.
Post by Michael Ottenbruch
eintragen kann und diese Zelle dann als Ergebnis die Adresse enthält,
die ich anspringen möchte, in diesem Fall bsplsw. "$B$377".
Ich müßte also nur noch wissen, wie ich in einem Makro genau diese Zelle
anspringen kann.
Wenn Du es hinbekommst, dass in deiner Zelle das Ziel in der Form z.B.
A20 steht dann setzt dieses Makro den sichtbaren Cursor (in Basic gibt
es auch einen unsichtbaren Cursor) nach A20
Super! Tut genau, was es soll!
Post by K_R
sub GotoPosition
myDoc = thisComponent
mysheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(0,0)
Rem Lese A1 aus (nicht verwirren lassen Zählung beginnt bei 0)
MeinePosition=mycell.string
myView = myDoc.CurrentController
mycell = mysheet.getCellRangeByName(MeinePosition)
myView.Select(mycell)
end sub
Das scheint jetzt allerdings eine völlig andere Sprache zu sein als die,
die im Nachbarposting empfohlen wird.

Das stört mich aber überhaupt nicht!
Vielen herzlichen Dank!
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
K_R
2020-06-09 20:03:25 UTC
Permalink
Post by Michael Ottenbruch
Das scheint jetzt allerdings eine völlig andere Sprache zu sein als die,
die im Nachbarposting empfohlen wird.
Das stört mich aber überhaupt nicht!
Vielen herzlichen Dank!
Das ist OpenOffice Basic. Aufgezeichnetes sieht immer völlig anders aus
;-) ist aber (glaube ich) auch OOBasic.

Wer Interesse hat schaut hier:
http://www.dannenhoefer.de/faqstarbasic/index.html

Gruß Klaus
Michael Ottenbruch
2020-06-09 21:53:21 UTC
Permalink
Post by K_R
Post by Michael Ottenbruch
Das scheint jetzt allerdings eine völlig andere Sprache zu sein als die,
die im Nachbarposting empfohlen wird.
Das stört mich aber überhaupt nicht!
Vielen herzlichen Dank!
Das ist OpenOffice Basic. Aufgezeichnetes sieht immer völlig anders aus
;-) ist aber (glaube ich) auch OOBasic.
Wahnsinn!

Ich habe Deinen Code einfach mal probeweise hinter mein
(aufgezeichnetes!) Sortiermakro gesetzt, und beides zusammen läßt sich
tatsächlich genau so in einem Rutsch ausführen.
Post by K_R
http://www.dannenhoefer.de/faqstarbasic/index.html
Da hatte ich auch schon gesucht, aber das setzte mir zuviel voraus.

Im Prinzip ist die Sortierroutine ja stocksimpel:

1. Zum Ende des Dokumentes springen.
2. Von da bis Zelle (in meinem Fall:) "A5 selektieren" (bei Aufzeichnung
gelöst als: Bis Beginn des Dokumentes selektieren
(<Shift>-<Ctrl>-<Pos1>) und 4 x <Shift>-<Down>.
3. Sortieren nach (in meinem Fall:) Spalte B aufsteigend, Spalte E
aufsteigend, Spalte D absteigend.

Das sieht dann aufgezeichnet so aus:

| sub Sortiertest_Datum
| 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 = "Sel"
| args1(0).Value = false
|
| dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args1())
|
| rem ----------------------------------------------------------------------
| dim args2(0) as new com.sun.star.beans.PropertyValue
| args2(0).Name = "Sel"
| args2(0).Value = true
|
| dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args2())

Das Folgende wurde ursprünglich 4 x mit "args[3456](0).Value = 1" usw.
aufgerufen, aber das ließ sich ja leicht optimieren:

| rem ----------------------------------------------------------------------
| dim args3(1) as new com.sun.star.beans.PropertyValue
| args3(0).Name = "By"
| args3(0).Value = 4
| args3(1).Name = "Sel"
| args3(1).Value = true
|
| dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args3())
|
|
| rem ----------------------------------------------------------------------
| dim args7(10) as new com.sun.star.beans.PropertyValue
| args7(0).Name = "ByRows"
| args7(0).Value = true
| args7(1).Name = "HasHeader"
| args7(1).Value = false
| args7(2).Name = "CaseSensitive"
| args7(2).Value = false
| args7(3).Name = "IncludeAttribs"
| args7(3).Value = true
| args7(4).Name = "UserDefIndex"
| args7(4).Value = 0
| args7(5).Name = "Col1"
| args7(5).Value = 2
| args7(6).Name = "Ascending1"
| args7(6).Value = true
| args7(7).Name = "Col2"
| args7(7).Value = 5
| args7(8).Name = "Ascending2"
| args7(8).Value = true
| args7(9).Name = "Col3"
| args7(9).Value = 4
| args7(10).Name = "Ascending3"
| args7(10).Value = false
|
| dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args7())

Und dann eben noch Deinen Code:

| myDoc = thisComponent
| mysheet = myDoc.sheets(0)
| mycell = mysheet.getCellByPosition(8,1)
| Rem Lese A1 aus (nicht verwirren lassen Zählung beginnt bei 0)

Bei mir steht die Position nicht in A1, sondern in I2 :-)

| MeinePosition=mycell.string
| myView = myDoc.CurrentController
| mycell = mysheet.getCellRangeByName(MeinePosition)
| myView.Select(mycell)
|
| end sub

Und das funktioniert dann tatsächlich genau so. :-)

Ich habe jetzt vor lauter Begeisterung mal versucht, das anhand von
Punkt 7.2.1 der o.g. FAQ ohne Aufzeichnung nachzubauen, und es
funktioniert tatsächlich:

Sub SortiereUndSpringe
Dim SortProps(2) As new com.sun.star.beans.PropertyValue
Dim SortFeld(2) As new com.sun.star.table.TableSortField
oDatei = ThisComponent
oSheet = oDatei.Sheets(0)
oBereich = oSheet.getCellRangeByName("A5:K518")

SortFeld(0).Field = 1
SortFeld(0).IsAscending = True
SortFeld(0).FieldType = com.sun.star.util.SortFieldType.NUMERIC
SortFeld(1).Field = 4
SortFeld(1).IsAscending = True
SortFeld(1).FieldType = com.sun.star.util.SortFieldType.NUMERIC
SortFeld(2).Field = 3
SortFeld(2).IsAscending = False
SortFeld(2).FieldType = com.sun.star.util.SortFieldType.NUMERIC

SortProps(0).Name = "SortFields"
SortProps(0).Value = SortFeld()
SortProps(1).Name = "SortColumns"
SortProps(1).Value = False
SortProps(2).Name = "ContainsHeader"
SortProps(2).Value = False

oBereich.Sort(SortProps())

rem - und dann mutatis mutandis Dein Code von oben:

mycell = oSheet.getCellByPosition(8,1)
MeinePosition=mycell.string
myView = oDatei.CurrentController
mycell = oSheet.getCellRangeByName(MeinePosition)
myView.Select(mycell)

End Sub

Hat sofort funktioniert, als mir klar geworden war, daß die Spalten
jetzt 1, 4 und 3 anstatt 2, 5 und 4 sein müssen, weil ja jetzt ab "0"
gezählt wird.

Allerdings müßte ich ja für den Dauerbetrieb den Sortierbereich (in
meinem Fall A5:K518) wahrscheinlich noch benennen, damit er sich
adaptiert. Wo finde ich das denn?

Sehr spannend auf jeden Fall. Vielen Dank nochmal!
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
Michael Ottenbruch
2020-06-10 05:51:58 UTC
Permalink
Post by Michael Ottenbruch
Allerdings müßte ich ja für den Dauerbetrieb den Sortierbereich (in
meinem Fall A5:K518) wahrscheinlich noch benennen, damit er sich
adaptiert. Wo finde ich das denn?
Ich bin mittlerweile so weit gekommen, daß ich mit Hilfe von Punkt
7.3.14 der FAQ ("Wie kann man die letzte verwendete Zeile/Spalte
ermitteln?") die Funktion "GotoEndOfUsedArea" des Cursors kennengelernt
habe.

Ich glaube, durch Einfügen der folgenden Zeilen habe ich den
Sortierbereich von A5 bis zur letzten belegten Zelle ausgedehnt. Es
sieht zumindest so aus, als täte es jetzt genau das, was es soll:

oCellCursor = oSheet.createCursor
oCellCursor.GotoEndOfUsedArea(False)
nRow = oCellCursor.getRangeAddress().endRow
nEndColumn = oCellCursor.getRangeAddress().endColumn

oBereich = oSheet.getCellRangeByPosition(0,4,nEndColumn,nRow)

Das Ganze sieht jetzt also so aus:

Sub SortiereUndSpringe
Dim SortProps(2) As new com.sun.star.beans.PropertyValue
Dim SortFeld(2) As new com.sun.star.table.TableSortField
oDatei = ThisComponent
oSheet = oDatei.Sheets(0)
oCellCursor = oSheet.createCursor
oCellCursor.GotoEndOfUsedArea(False)
nRow = oCellCursor.getRangeAddress().endRow
nEndColumn = oCellCursor.getRangeAddress().endColumn

oBereich = oSheet.getCellRangeByPosition(0,4,nEndColumn,nRow)

SortFeld(0).Field = 1
SortFeld(0).IsAscending = True
SortFeld(0).FieldType = com.sun.star.util.SortFieldType.NUMERIC
SortFeld(1).Field = 4
SortFeld(1).IsAscending = True
SortFeld(1).FieldType = com.sun.star.util.SortFieldType.NUMERIC
SortFeld(2).Field = 3
SortFeld(2).IsAscending = False
SortFeld(2).FieldType = com.sun.star.util.SortFieldType.NUMERIC

SortProps(0).Name = "SortFields"
SortProps(0).Value = SortFeld()
SortProps(1).Name = "SortColumns"
SortProps(1).Value = False
SortProps(2).Name = "ContainsHeader"
SortProps(2).Value = False

oBereich.Sort(SortProps())

mycell = oSheet.getCellByPosition(8,1)
MeinePosition=mycell.string
myView = oDatei.CurrentController
mycell = oSheet.getCellRangeByName(MeinePosition)
myView.Select(mycell)

End Sub

Habe ich da noch etwas eingebaut, womit ich mich jetzt noch ins knie
schießen kann, oder kann das wirklich so gut funktionieren, wie es das
momentan zu tun schein?

vielen Dank nochmals!
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
K_R
2020-06-10 13:22:41 UTC
Permalink
Post by Michael Ottenbruch
Allerdings müßte ich ja für den Dauerbetrieb den Sortierbereich (in
meinem Fall A5:K518) wahrscheinlich noch benennen, damit er sich
adaptiert. Wo finde ich das denn?
Hallo Michael,
ist ja schonmal viel kürzer als das Aufgezeichnete. Für mehr
Flexibilität musst Du wie richtig vermutet diese Zeile
oBereich = oSheet.getCellRangeByName("A5:K518")
variabel machen.

Eigentlich musst Du nur die 518 durch den ermittelten Wert nRow aus
nachfolgendem Makro ersetzten.
Und wenn gewünscht das K mit nEndColumn ersetzen dann sind sogar die
Spalten flexibel.

Dieses Makro soll eigentlich den Cursor ans Ende der beschriebenen
Zeilen mit Inhalt setzen. War glaube ich dein ursprünglicher Wunsch.
Wenn meine Annahme stimmt könntest Du die Hilfszelle weglassen

sub LetzeZeile1
oDoc = thisComponent
myView = oDoc.CurrentController
Sheets=oDoc.sheets(0)
oCellCursor = Sheets.createCursor
oCellCursor.GotoEndOfUsedArea(False)

nRow = oCellCursor.getRangeAddress().endRow
Rem msgbox Zeilen sind nur für Testbetrieb drin
msgbox nRow
nEndColumn = oCellCursor.getRangeAddress().endColumn
msgbox nEndColumn
Rem geht in A zur letzten Zeile mit Inhalt (wenn lieber eins dahinter
dann (0,nRow+1) eintragen)
mycell = Sheets.getCellByPosition(0,nRow)
myView.Select(mycell)
end sub

Gruss Klaus
K_R
2020-06-10 17:51:35 UTC
Permalink
Post by K_R
Hallo Michael,
ist ja schonmal viel kürzer als das Aufgezeichnete. Für mehr
Flexibilität musst Du wie richtig vermutet diese Zeile
oBereich = oSheet.getCellRangeByName("A5:K518")
variabel machen.
Hab ganz übersehen, dass Du das bereits drin hast :-(

Gruss Klaus

Loading...