verschiedene Schaltflächen für verschiedene Tabellen

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

Moderator: Moderatoren

Kito
Beiträge: 1
Registriert: Di, 19.04.2011 20:33

verschiedene Schaltflächen für verschiedene Tabellen

Beitrag von Kito »

Hallo Zusammen,

ich wühle mich jetzt schon seit über drei Tagen durch die Forensuche, finde aber keine Lösung für mein Problem.

Ich habe in einem Tabellenblatt (Name: „Geraetekasten“) sechs Schaltflächen mit Umschaltfunktion. Die Schaltflächen (1 - 2 - 3) sind so angeordnet, dass jeweils drei in einer Reihe (auf OOo Calc bezogen in einer Zeile) angeordnet sind (je drei Spalten Abstand). In einem Abstand von vier Zeilen befinden sich die anderen drei Schaltflächen (4 - 5 - 6; in den gleichen Spalten wie die oberen Schaltflächen).
Beim bedienen der Schaltflächen sollen direkt rechts neben den Schaltflächen jeweils zugeordnete Tabellen (n Zeilen und m Spalten → für jede Tabelle unterschiedlich) auftauchen bzw. bei nochmaligen bedienen des Schalters wieder verschwinden (funktioniert bereits). Dabei werden die Tabellen aus einem weiteren Tabellenblatt (Name: „GeraeteZusatz“ → Tabellenblatt wird später ausgeblendet) herauskopiert und in das erste Tabellenblatt eingefügt (Schalterposition 1) bzw. im ersten Tabellenblatt wieder gelöscht (Schalterposition 2) (Sinn: man soll nicht gleich vom Anblick aller Tabellen „verwirrt“ werden).

Mein Problem ist das Zuordnen der Positionen der Tabellen in Abhängigkeit von den verschiedenen Schalterpositionen. Ist zum Beispiel neben Schalter 1 (hier genannt „Hauptkomponente_1“) in Schaltposition 1 die zugehörige Tabelle eingeblendet, sind die möglichen Positionen für die Tabellen der verbliebenen Schalter andere (entsprechend um die Zeilen- und Spaltenzahl nach unten bzw. nach rechts verschoben) als wenn die Tabelle von Schalter 1 nicht eingeblendet ist (Schaltposition 2).
Dies gilt auch für jede andere Kombination von Schaltpositionen der verschiedenen Schalter.
Bei den Tabellen deren Schalter in einer Reihe liegen sollen auch die obersten Zeilen der Tabellen in einer Reihe/Zeile liegen. Ebenso sollen für Schalter die in einer Spalte liegen auch die linken Spalten der jeweiligen Tabellen in der selben Spalte liegen.

Das unten aufgeführte Makro beschreibt das einkopieren und löschen der Tabelle für Schalter 1 in das erste Tabellenblatt in Abhängigkeit von der Schalterposition. Für die Makros der fünf restlichen Schalter ändert sich lediglich die Nummerierung hinter „Hauptkomponente“ und die Auslese- bzw. Kopierposition.

Ich hoffe ihr könnt mir bei meinem Problem helfen.

Gruß

Kito


Sub Hauptkomponente_1_Geraetkasten_1
Dim Doc As Object
Dim Sheet As Object
Dim DrawPage As Object
Dim Form As Object

Doc = ThisComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.DrawPage
Form = DrawPage.Forms.GetByIndex(0)
Button = Form.GetbyName("Hauptkomponente_1")
'MsgBox(Button.Anchor)
If Button.State = 1 Then

Call Hauptkomponente_1_Geraetkasten_1_einfuegen
Elseif Button.State = 0 Then

Call Hauptkomponente_1_Geraetkasten_1_loeschen

End if

end sub



Sub Hauptkomponente_1_Geraetkasten_1_einfuegen

odoc=thiscomponent
mysheet=odoc.sheets("Geraetekasten")
mycolumns=mysheet.getcolumns
mycolumns.insertbyindex(1,3)

'odoc=thiscomponent
mysheet=odoc.sheets("Geraetekasten")
myrows=mysheet.getrows
myrows.insertbyindex(1,19)

oDocument = ThisComponent
oSheet1 = oDocument.Sheets.getByName("GeraeteZusatz")
oSheet2 = oDocument.Sheets.getByName("Geraetekasten")
' Quellbereich festlegen
' Zeile Format : ( 0,Zeile,255,Zeile)
oQuelleRange=oSheet1.getCellRangeByPosition(1,5,3,23)
oQuellRangeAddresse = oQuelleRange.getRangeAddress
oZiel = oSheet2.getCellByPosition(1,1)
oZielCellAdresse=oZiel.getCellAddress
oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)

for i = 1 to 3
oSheet2.GetColumns.getByIndex(i).optimalwidth = true
next i

End Sub


Sub Hauptkomponente_1_Geraetkasten_1_loeschen

odoc=thiscomponent
mysheet=odoc.sheets("Geraetekasten")
mycolumns=mysheet.getcolumns
mycolumns.removebyindex(1,3)

odoc=thiscomponent
mysheet=odoc.sheets("Geraetekasten")
myrows=mysheet.getrows
myrows.removebyindex(1,19)

'oDocument = ThisComponent
' oSheet2 = oDocument.Sheets.getByName("Geraetekasten")
' oQuelleRange=oSheet2.getCellRangeByPosition(1,1,3,19)
' oQuellRangeAdresse = oQuelleRange.getRangeAddress
' oSheet2.removeRange( oQuellRangeAdresse, com.sun.star.sheet.CellDeleteMode.LEFT)
' oSheet2.removeRange( oQuellRangeAdresse, com.sun.star.sheet.CellDeleteMode.UP)

End Sub