Seite 1 von 1
Makros und TabellenNamen
Verfasst: Di, 24.03.2009 12:26
von Aleiga
Hallo ich habe eine Frage zu der Verwendung von TabellenNamen in Makros,
Folgendes möchte ich realisieren:
Ich habe in einer Cal-Datei mehrere Tabellenblätter, jedes Blatt hat einen von mir vergebenen Namen.
Nun habe ich eine Symbolleisten angelegt. Diese Symbolleiste soll Befehls-Schalter enthalten die jeweils ein Makro aufrufen. Das aufgerufene Makro soll nicht weiter tun als zu einem bestimmten Tabellenblatt zu springen.
Folgendes habe ich bisher gemacht:
-- anlegen der Symbolleiste
-- Erstellen der Makros (siehe unten)
-- Verknüfen der Makros mit jeweils einem Befehl auf der Symbolleiste
Code: Alles auswählen
sub Senf
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 = "Nr"
args1(0).Value = 7
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
end sub
[\code]
Funktioniert auch alle bestens, aber ich habe ein Problem:
Die Tabellen werden über Nummern aufgerufen, im Bsp. oben Nr. 7, wenn ich jedoch in der Datei vorne eine neue Tabelle aus einer Vorlagendatei einfüge, dann wird z.B mit dem Schalter für [i]Senf[\i] zwar weiterhin die Nummer 7 aufgerufen, dahinter verbirgt sich jedoch nicht mehr das Rezept für Senf sonder das was unmittrelbar davor steht.
Deshalb möchte ich das Makro so abändern, daß ich den TabellenNamen verwende und nicht die Nummer.
Kann mir jemand einen Tipp geben.
Vielen Dank im voraus Aleiga
Re: Makros und TabellenNamen
Verfasst: Di, 24.03.2009 13:14
von Charly
Hallo!
Aleiga hat geschrieben:
Deshalb möchte ich das Makro so abändern, daß ich den TabellenNamen verwende und nicht die Nummer
Der aufgezeichnete Code ist dafür etwas umständlich. Nimm besser folgenden Code:
Code: Alles auswählen
Sub TabellenblattAktvieren()
Dok = ThisComponent
Controller = Dok.getCurrentController
Tab = Dok.sheets.getByName("Tabelle2") 'Hier den Namen der gewünschten Tabelle eintragen
Controller.activeSheet = Tab
End Sub
Gruß
Charly
Re: Makros und TabellenNamen
Verfasst: Di, 24.03.2009 13:53
von komma4
...oder, als wiederverwendbare Routine (Parameter: Tabellenname)
Code: Alles auswählen
Sub calc_jump2SheetByName( Optional sName as String )
If IsMissing( sName ) Then Exit Sub
If ThisComponent.Sheets().hasByName( sName ) Then
oZiel = ThisComponent.Sheets().getByName( sName )
oBlatt = ThisComponent.CurrentController.setActiveSheet( oZiel )
End If
End Sub
Re: Makros und TabellenNamen
Verfasst: Di, 24.03.2009 14:00
von Aleiga
Hallo Charly,
danke für die schnelle Antwort.
Ich habe schon grundlegende kenntnisse im Programmieren und deshalb noch eine frage zu Deinem Code:
Wenn ich mehre Tabellen über ihren Namen aufrufen möchte, habe ich doch zwei Möglichkeiten:
1. ich nehme Deine Prozedur kopiere sie x-mal mit unterschiedlichen Namen und füge in Zeile
Code: Alles auswählen
Tab = Dok.sheets.getByName("Tabelle2") 'Hier den Namen der gewünschten Tabelle eintragen'
immer einen anderen Namen ein
2. Ich nehme Deine Prozedur und versehe sie mit eine Aufrufparameter, z.B. so:
Code: Alles auswählen
Sub TabellenblattAktvieren(Name)
Dok = ThisComponent
Controller = Dok.getCurrentController
Tab = Dok.sheets.getByName(Name) 'Hier den Namen der gewünschten Tabelle eintragen
Controller.activeSheet = Tab
End Sub
Wenn das so funktionieren sollte, dann ist die nächste Frage: wie gestalte ich in OpenOffice Calc den Aufruf eines Makros mit einem Parameter?
Kannst Du mir auch hierauf eine Antwort geben
Vielen Dank im voraus Aleiga
Re: Makros und TabellenNamen
Verfasst: Di, 24.03.2009 14:18
von komma4
Aleiga hat geschrieben:wie gestalte ich in OpenOffice Calc den Aufruf eines Makros mit einem Parameter?
Code: Alles auswählen
Sub aufrufenRoutineWechseln
sName = "Tabelle2"
msgbox "Wechsle nun zu Tabellenblatt: " & sName
' Aufruf
TabellenblattAktvieren( sName )
' ...
' weitere Anweisungen
End Sub
Re: Makros und TabellenNamen
Verfasst: Di, 24.03.2009 14:33
von Charly
Hallo!
Komma4 hat deine Frage ja schon beantwortet.
Ich möchte dir nur noch einen Hinweis auf Verwenden von Variablen geben.
In deiner Abänderung verwendest du nämlich als Variblennamen "Name". Da das dem englischen "name" entspricht, kannst du das nicht verwenden, da das ein Schlüsselwort in Starbasic ist. Wie du siehst hat komma4 deshalb "sName" als Variable genommen.
Gruß
Charly
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 08:17
von Aleiga
Hallo Charly, hallo Winfried,
vielen Dank für Eure Hilfe, unklar ist mir allerdings immer noch folgendes:
wie rufe ich ein Makro mit Parameter aus OpenOffice heraus aus auf, also nicht innerhalb von Basic.
Wenn ich z.B. den Weg über "Extras"->"Makros"->"Makros ausführen" gehe, habe ich keine Möglichkeit einen Parameter zu übergeben.
Vielen Dank im voraus Aleiga
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 08:27
von komma4
Aleiga hat geschrieben:wie rufe ich ein Makro mit Parameter aus OpenOffice heraus aus auf, also nicht innerhalb von Basic.
Geht nicht.
Du kannst ein Makro von der Kommandozeile aus mit einem Parameter starten, oder aus einem Makro heraus (wie gezeigt).
Das Zuweisen eines Makros mit unterschiedlichen Parametern zu verschiedenen Schaltflächen bspw. geht nicht...
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 08:57
von Charly
Hallo Aleiga!
Aleiga hat geschrieben:
Nun habe ich eine Symbolleisten angelegt. Diese Symbolleiste soll Befehls-Schalter enthalten die jeweils ein Makro aufrufen. Das aufgerufene Makro soll nicht weiter tun als zu einem bestimmten Tabellenblatt zu springen.
In deiner Eingangsfrage hast du geschrieben, dass du für jedes Tabellenblatt einen Schalter einrichtest. Dann brauchst du doch den Code nur so oft zu kopieren, wie du Tabellenblätter hast und in jedem Code ein bestimmtes Tabellenblatt fest hinterlegen. Dann kannst du jedem Schalter den zutreffenden Code zuweisen.
Gruß
Charly
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 09:15
von komma4
Code: Alles auswählen
Sub jump2_Tabelle1
calc_jump2SheetByName( "Tabelle1" )
End Sub
Sub jump2_Tabelle2
calc_jump2SheetByName( "Tabelle2" )
End Sub
Sub jump2_Tabelle3
calc_jump2SheetByName( "Tabelle3" )
End Sub
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 13:29
von Aleiga
Hallo Charly, hallo winfried,
Danke für die Rückmeldung, schade, aber was nicht geht, geht nicht.
Ich finde es nur sehr unelegant 70 Prozeduren zu erstellen, die sich nur durch den an das Makro übergebenen Parmeter unterscheiden.
Aber es geht nun mal nicht anders.
Vielen Dank für Eurer Unterstützung
Viele Grüße von Aleiga
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 15:47
von keksi1970
hi,
vielleicht ist auch nur dein ansatz etwas zu kompliziert.
du willst einfach in der Symbolleiste ein Makro, welches zu einer bestimmten tabelle springt ?
als kurzform : frage den Tabellennamen per inputbox ab
als deluxe-version : erstelle einen dialog mit einer Listbox, in der alle Tabellennamen aufgeführt sind und wähle
lg andreas
Re: Makros und TabellenNamen
Verfasst: Mi, 25.03.2009 17:44
von komma4
Aleiga hat geschrieben:Ich finde es nur sehr unelegant 70 Prozeduren zu erstellen
Ja. Deshalb stimmt auch...
keksi1970 hat geschrieben:vielleicht ist auch nur dein ansatz etwas zu kompliziert
Gute Frage!
Ginge es darum in einer speziellen Arbeitsumgebung das "Springen" auf ein bis sechs/sieben Tabellenblättern per Symbolleiste anzubieten: OK.
[das geht noch, ist aus anderen Gründen aber nicht so gut]
Eine Symbolleiste mit 70 Schaltflächen: no go.
[Platzbedarf, Ergonomie: wie siebzig verschiedene Symbole erkennen?]
Keksis Lösung, eingebaut:
was spricht gegen die Nutzung des Navigators: F5, einmal "Tabelle" aufklicken, dann stehen alle (lesbar!) zum Wechsel zur Verfügung (Doppelklick).
