Seite 1 von 1

Calc Index im ersten Blatt

Verfasst: Mo, 11.06.2018 21:50
von Mausebär
Hallo zusammen,
ich möchte mir einen Index für die alle vorhandenen Blätter machen, und zwar auf Blatt 1.
Dazu habe ich im Internet folgende Excel- Anleitung gefunden:
https://praxistipps.chip.de/inhaltsverz ... llen_12932
In Excel funktioniert das ausgezeichnet, nur läßt sich das Makro nicht in Calc abspielen...
In Excel sind das folgende Befehle:

Code: Alles auswählen

    Sub Tabellenliste()
    Sheets(1).Select
    Sheets.Add
    Sheets(1).Name = "Inhalt"
    n = 1
    For Each i In Worksheets
    If i.Index <> 1 Then Range("a" & n - 1).Value = i.Name
    n = n + 1
    Next i
    End Sub
Da ich von Excel-Makros wenig Ahnung habe und in OO noch nie mit Makros gearbeitet habe, bitte ich die Kundigen mir das in OO- Makrosprache zu "übersetzen".
Wenn man dann im Index gleich einen Sprung zu dem Tabellenblatt machen könnte, wäre das ideal.
Ich habe hier bereits einen ähnlichen Beitrag gefunden, krieg das aber nicht zum Laufen...:
http://www.oooforum.de/viewtopic.php?t=15882

Vielen Dank für eure Unterstützung

Re: Calc Index im ersten Blatt

Verfasst: Di, 12.06.2018 10:10
von mikeleb
Hallo,
ein erster Querverweis in dem von dir erwähntren Beitrag führt dich zu viewtopic.php?t=11317
Dort hast du ein fertiges Makro:

Code: Alles auswählen

Sub TabellenNamenAuslesen
doc=thisComponent
for i = 0 to doc.sheets.count - 1
doc.sheets(0).getcellbyposition(0,i).string=doc.sheets(i).name
next
End Sub
Das sollte problemlos durchlaufen. Dann hast du die Tabellennamen in Spalte A. Daneben, in B1, setzt du als Funktion

Code: Alles auswählen

=Hyperlink("#" & A1;"gehe zur Tabelle oder was du als Text haben möchtest")
Die Formel kannst du dann nach unten ziehen und hast die gewünschten Sprünge.

Re: Calc Index im ersten Blatt

Verfasst: Di, 12.06.2018 11:19
von Mausebär
Es funktioniert. Warum ich das beim ersten Mal nicht hingekriegt hab, keine Ahnung.
Das Makro erstellt aber kein neues Blatt "Index" (das Excel-Makro macht das)... Könnte man das noch mit in das Makro einbauen?
=Hyperlink("#" & A1;"gehe zur Tabelle oder was du als Text haben möchtest")
Wofür steht "#" ?
Wie müßte ich das parametrieren, wenn ich in den einzelnen Blättern (z.B. in der Kopfzeile) den Rücksprung zum Index haben möchte?

Aber jetzt schon mal vielen Dank für die gute Unterstützung!!!

Ich seh schon, ich muß mich intensiver mit OO Makros beschäftigen...

Re: Calc Index im ersten Blatt

Verfasst: Di, 12.06.2018 21:14
von Stephan
Das Makro erstellt aber kein neues Blatt "Index" (das Excel-Makro macht das)... Könnte man das noch mit in das Makro einbauen?

Code: Alles auswählen

Sub TabellenNamenAuslesen
doc=thisComponent
doc.Sheets.insertNewByName("Inhalt", 0)
for i = 0 to doc.sheets.count - 1
doc.sheets(0).getcellbyposition(0,i).string=doc.sheets(i).name
next
End Sub
Wofür steht "#" ?
Das ist, unter den konkreten Umständen eines Tabellendokuments, ein Teil der Linkadresse. (keine Ahnung warum, schreibt sich halt so)
Wie müßte ich das parametrieren, wenn ich in den einzelnen Blättern (z.B. in der Kopfzeile) den Rücksprung zum Index haben möchte?
Kopfzeile wird nicht gehen, weil diese nur in der Seitenansicht sichtbar. Du könntest höchstens jeweils in eine Zelle einen Link reinschreiben.

Code: Alles auswählen

Sub TabellenNamenAuslesen
doc=thisComponent
doc.Sheets.insertNewByName("Inhalt", 0)

for i = 1 to doc.sheets.count - 1
 n = doc.sheets(i).name
 doc.sheets(0).getcellbyposition(0,i).FormulaLocal="=Hyperlink(""#" & n & """;""" & n & """)"
 doc.sheets(i).getcellbyposition(0,0).FormulaLocal="=Hyperlink(""#" & "Inhalt" & """;""zurück"")"
next
End Sub
Gruß
Stephan

Re: Calc Index im ersten Blatt

Verfasst: Di, 12.06.2018 22:50
von Mausebär
Kopfzeile wird nicht gehen, weil diese nur in der Seitenansicht sichtbar.
Da hab ich mich wahrscheinlich mißverständlich ausgedrückt.
Ich meine die Zeile 1, die ich mit "Fixieren" immer zur Verfügung habe.
Die Frage wäre, wie parametriert man

Code: Alles auswählen

=Hyperlink("#" & A1;"gehe zur Tabelle oder was du als Text haben möchtest")
damit Ich aus einem beliebigen Blatt einen Sprung zum 1. Blatt (Index) hinkriege... Hab schon rumprobiert, aber ich kriegs nicht hin...

Re: Calc Index im ersten Blatt

Verfasst: Di, 12.06.2018 23:15
von mikeleb
Hallo,
indem du auf der Tabelle von der aus du springen willst (also z. B. in A1 auf Tabelle5) die Formel setzt:

Code: Alles auswählen

=Hyperlink("#Index.A1";"Text der in der Zelle stehen soll")
Wenn du zuerst alle Tabellen markierst, die das betreffen soll (also ja bis auf "Index" alle) und dann die Formel schreibst, hast du sie gleich auf allen Tabellen.

Re: Calc Index im ersten Blatt

Verfasst: Di, 12.06.2018 23:22
von Stephan
Mausebär hat geschrieben: Di, 12.06.2018 22:50 Die Frage wäre, wie parametriert man

Code: Alles auswählen

=Hyperlink("#" & A1;"gehe zur Tabelle oder was du als Text haben möchtest")
damit Ich aus einem beliebigen Blatt einen Sprung zum 1. Blatt (Index) hinkriege... Hab schon rumprobiert, aber ich kriegs nicht hin...
Ich sehe nur die Möglichkeit eine benutzerdefinierte Funktion zum Bestimmen der ersten Tabelle zu nutzen:

Code: Alles auswählen

Function TAB1()
TAB1 = ThisComponent.Sheets(0).Name
End Function
in der Zelle steht dann:
=HYPERLINK("#"&TAB1();"zur ersten Tabelle")

Der Nutzen erschließt sich mir aber nicht, weil ja im Makro der Name der ersten Tabelle ohnehin fest angeben ist und man sich somit auch gleich auf diesen Namen beziehen kann und ihn nicht nochmals per benutzerdefinierter Funktion bestimmen muss, also:

=HYPERLINK("#Inhalt";"zur ersten Tabelle")

auch in meinem Makro funktioniert das so:

Code: Alles auswählen

'...
doc.Sheets.insertNewByName("Inhalt", 0)
'...
doc.sheets(i).getcellbyposition(0,0).FormulaLocal="=Hyperlink(""#" & "Inhalt" & """;""zurück"")"
'...

Gruß
Stephan

Re: Calc Index im ersten Blatt

Verfasst: Mi, 13.06.2018 10:32
von Mausebär
ich bekomme da eine Fehlermeldung:
Fehlermeldung.jpg
Fehlermeldung.jpg (133.56 KiB) 37268 mal betrachtet
Kann mir jemand die Funktionen der einzelnen Zeilen erklären? Es sind ja nicht so viele...

Das vorherige Makro funktioniert wunschgemäß (es wird ein neues Blatt als Inhalt erstellt und es sind darin alle Blätter enthalten), auch der Rücksprung funktioniert (den ich in die Zieltabelle händisch eingefügt habe). Damit wären eigentlich meine Wünsche erfüllt...
Man könnte natürlich die Sache noch komfortabler machen, indem man alles in ein Makro packt:

Einfügen des neuen Blattes "Inhalt"
Einfügen der Blätternamen in den Index
Einfügen des Sprunges zu dem gewünschten Blatt (bzw. den Eintrag direkt als Hyperlink benützen)
Eintrag eines Rücksprungbefehls in eine bestimmte Zelle der 1. Zeile in alle Blätter

Wäre es das gewesen in dem Makro mit der Fehlermeldung?
Ich könnte mir gut vorstellen, daß sowas mehrere Leute brauchen könnten.

Aber ich will euch nicht überstrapazieren. Es ist jetzt schon mehr als ich erwartet habe. Wann ich soweit bin, daß ich das selber programmieren kann, weiß ich noch nicht.

Jedenfalls habt ihr mir bis jetzt sehr geholfen, wofür ich mich recht herzlich bedanken möchte.

Re: Calc Index im ersten Blatt

Verfasst: Mi, 13.06.2018 11:02
von Stephan
ich bekomme da eine Fehlermeldung:
mutmaßlich weil Dein Tabellendokument bereits ein Tabellenblatt namens "Inhalt" enthält.
Nötigenfalls baue also eine Prüfung ein:

Code: Alles auswählen

Sub TabellenNamenAuslesen
doc=thisComponent
If Not(ThisComponent.Sheets.hasByName("Inhalt")) Then
 doc.Sheets.insertNewByName("Inhalt", 0)
End If

for i = 1 to doc.sheets.count - 1
 n = doc.sheets(i).name
 doc.sheets(0).getcellbyposition(0,i).FormulaLocal="=Hyperlink(""#" & n & """;""" & n & """)"
 doc.sheets(i).getcellbyposition(0,0).FormulaLocal="=Hyperlink(""#" & "Inhalt" & """;""zurück"")"
next
End Sub

Gruß
Stephan

Re: Calc Index im ersten Blatt

Verfasst: Mi, 13.06.2018 13:52
von Mausebär
Genau das war es, daß da schon das Blatt "Inhalt" vorhanden war.
Auch der Eintrag in die Blätter mit dem Rücksprung funktioniert wie gewünscht.
Jedoch wird dieser Rücksprung in A1 eingetragen, wo eigentlich schon eine andere Überschrift steht.
Wie muß ich das Makro abändern, damit "Zurück" in z.B. G1 oder einer anderen beliebigen Zelle steht?

Re: Calc Index im ersten Blatt

Verfasst: Mi, 13.06.2018 17:54
von Stephan
z.B. G1:

Code: Alles auswählen

Sub TabellenNamenAuslesen
doc=thisComponent
If Not(ThisComponent.Sheets.hasByName("Inhalt")) Then
 doc.Sheets.insertNewByName("Inhalt", 0)
End If

for i = 1 to doc.sheets.count - 1
 n = doc.sheets(i).name
 doc.sheets(0).getcellbyposition(0,i).FormulaLocal="=Hyperlink(""#" & n & """;""" & n & """)"
 doc.sheets(i).getcellRangeByName("G1").FormulaLocal="=Hyperlink(""#" & "Inhalt" & """;""zurück"")"
next
End Sub
Gruß
Stephan

Re: Calc Index im ersten Blatt

Verfasst: Mi, 13.06.2018 20:48
von Mausebär
...absolut spitzenmäßig!!!

Vielen Dank!!! Excel Ade!