Calc Index im ersten Blatt

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Mausebär
***
Beiträge: 91
Registriert: Mi, 16.12.2009 17:21
Wohnort: Bei München

Calc Index im ersten Blatt

Beitrag 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
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc Index im ersten Blatt

Beitrag 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.
Gruß,
mikeleb
Mausebär
***
Beiträge: 91
Registriert: Mi, 16.12.2009 17:21
Wohnort: Bei München

Re: Calc Index im ersten Blatt

Beitrag 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...
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Calc Index im ersten Blatt

Beitrag 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
Mausebär
***
Beiträge: 91
Registriert: Mi, 16.12.2009 17:21
Wohnort: Bei München

Re: Calc Index im ersten Blatt

Beitrag 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...
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: Calc Index im ersten Blatt

Beitrag 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.
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Calc Index im ersten Blatt

Beitrag 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
Mausebär
***
Beiträge: 91
Registriert: Mi, 16.12.2009 17:21
Wohnort: Bei München

Re: Calc Index im ersten Blatt

Beitrag von Mausebär »

ich bekomme da eine Fehlermeldung:
Fehlermeldung.jpg
Fehlermeldung.jpg (133.56 KiB) 37208 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.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Calc Index im ersten Blatt

Beitrag 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
Mausebär
***
Beiträge: 91
Registriert: Mi, 16.12.2009 17:21
Wohnort: Bei München

Re: Calc Index im ersten Blatt

Beitrag 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?
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Calc Index im ersten Blatt

Beitrag 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
Mausebär
***
Beiträge: 91
Registriert: Mi, 16.12.2009 17:21
Wohnort: Bei München

Re: Calc Index im ersten Blatt

Beitrag von Mausebär »

...absolut spitzenmäßig!!!

Vielen Dank!!! Excel Ade!
Antworten