Makros und TabellenNamen

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

Moderator: Moderatoren

Aleiga
Beiträge: 4
Registriert: Di, 24.03.2009 11:56

Makros und TabellenNamen

Beitrag 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
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makros und TabellenNamen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makros und TabellenNamen

Beitrag 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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Aleiga
Beiträge: 4
Registriert: Di, 24.03.2009 11:56

Re: Makros und TabellenNamen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makros und TabellenNamen

Beitrag 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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makros und TabellenNamen

Beitrag 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
Aleiga
Beiträge: 4
Registriert: Di, 24.03.2009 11:56

Re: Makros und TabellenNamen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makros und TabellenNamen

Beitrag 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...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Makros und TabellenNamen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makros und TabellenNamen

Beitrag 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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Aleiga
Beiträge: 4
Registriert: Di, 24.03.2009 11:56

Re: Makros und TabellenNamen

Beitrag 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
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Makros und TabellenNamen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makros und TabellenNamen

Beitrag 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).
Bild
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten