Hallo zusammen,
ich habe für die in unserem Betrieb verwendete Calc-Stückliste ein Makro geschrieben, das jedes in der For-Schleife erfasste Tabellenblatt zeilenweise durchläuft und daraus eine Textdatei bastelt, die die Zuschnittoptimierung einlesen kann. Jedes Tabellenblatt enthält die Teile einer Position.
Das ist recht einfach wenn ich alle Positionen optimieren möchte, wird aber umständlich wenn ich ausgewählte Positionen haben möchte. Dann muss ich jedesmal in das Makro gehen und die Schleife anpassen. Wenn die Positionen nicht hintereinander liegen sogar mehrmals.
Ich hätte also gerne einen Dialog mit einer Liste der vorhandenen Tabellenblatt-Namen, in dem ich per Mehrfachauswahl die zu bearbeitenden Tabellen auswähle.
Gibt es da Beispiele, anhand derer auch ein in die Jahre gekommener Anfänger wie ich das hinbekommt?
Gruß
Martin
Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro
Moderator: Moderatoren
Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro
Kapitel 7.1 in:Gibt es da Beispiele, anhand derer auch ein in die Jahre gekommener Anfänger wie ich das hinbekommt?
http://www.calc-info.de/files/Calc_StarBasic.pdf
zeigt ein Beispiel wie Du in Calc durch eine Mehrfachauswahl interierst:
Code: Alles auswählen
Sub mehrfachSelektion
Dim selektion as Object
Dim ausgabe as String
Dim zellBereichAddresse as Object
selektion = ThisComponent.getCurrentSelection()
If Not( selektion.supportsService( _
"com.sun.star.sheet.SheetCellRanges" ) ) then
MsgBox "keine Mehrfachselektion"
Exit Sub
End If
ausgabe = "Mehrere Zellbereiche ausgewählt" & chr(13)
' Anzahl der Zellbereiche
ausgabe = ausgabe & "Anzahl Bereiche: " & _
selektion.getCount() & chr(13)
' Schleife durch alle Zellbereiche
for i=0 To selektion.getCount()-1
' Adresse des Zellbereiches holen
zellBereichAddresse = selektion._
getByIndex(i).getRangeAddress()
' Adressinfo an Ausgabe anfügen
ausgabe = ausgabe & _
zellBereichAddresse.StartColumn & "" & _
zellBereichAddresse.StartRow & "->" & _
zellBereichAddresse.EndColumn & "" & _
zellBereichAddresse.EndRow & chr(13)
Next i
' Ausgabe der Informationen über MessageBox
MsgBox ausgabe
End Sub
Stephan
Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro
Hallo Martin, Stephan,
ich glaube, ihr sprecht von verschiedenen Sachen;)
Martin sucht eine Möglichkeit, in einer Listbnox eines Dialoges eine Mehrfachauswahl vorzunehmen und dann über die Auswahl zu iterieren.
Stephan beschreibt die Möglichkeit, eine Mehrfachauswahl (Zellen) in einem Tabellenblatt wieder aufzudröseln. Das sind unterschiedliche Sachen.
@Martin:
Eigentlich müsste ich auf ein gutes Buch verweisen - dort steht das alles drin ("Makros in OpenOffice.org") - leider ist dies Buch nicht mehr verfügbar. Da Du selbst schreibst, Du bist "Anfänger", ist das schwer, Dir wirklcih zu helfen ohne den kompletten Code zu schreiben (und dazu habe ich jetzt keine Zeit...).
Die Lösung sieht wie folgt aus: Du erzeugst einen Dialog und spendierst ihm eine Listbox. Der Listbox übergibst Du die Liste der Tabellenblatt-Namen, die Du direkt aus dem Dokument auslesen kannst (ist ein Array, die Listbox erwartet einen Array):
Dabei ist oCtl das Objekt Deiner Listbox und oDoc das Objekt deines Dokuments.
Zusätzlich musst Du bei der Listbox die Möglichkeit der Mehrfachauswahl zulassen - geht direkt über die IDE.
Zur Abfrage der gewählten Namen wirst Du dann im Makro den folgenen Codeschnipel verwenden:
Das wäre die Grundstruktur - die Liste enthält die Namen der gewählten Tabellenblätter - die kannste dann entsprechend weiter bearbeiten.
Brauchst natürlich auch noch Fehlerstrukturen (bsw. wenn gar keine Tabelle gewählt wurde etc.) - aber wie gesagt - das alles ist etwas komplexer;)
Viele Grüße
Tom
ich glaube, ihr sprecht von verschiedenen Sachen;)
Martin sucht eine Möglichkeit, in einer Listbnox eines Dialoges eine Mehrfachauswahl vorzunehmen und dann über die Auswahl zu iterieren.
Stephan beschreibt die Möglichkeit, eine Mehrfachauswahl (Zellen) in einem Tabellenblatt wieder aufzudröseln. Das sind unterschiedliche Sachen.
@Martin:
Eigentlich müsste ich auf ein gutes Buch verweisen - dort steht das alles drin ("Makros in OpenOffice.org") - leider ist dies Buch nicht mehr verfügbar. Da Du selbst schreibst, Du bist "Anfänger", ist das schwer, Dir wirklcih zu helfen ohne den kompletten Code zu schreiben (und dazu habe ich jetzt keine Zeit...).
Die Lösung sieht wie folgt aus: Du erzeugst einen Dialog und spendierst ihm eine Listbox. Der Listbox übergibst Du die Liste der Tabellenblatt-Namen, die Du direkt aus dem Dokument auslesen kannst (ist ein Array, die Listbox erwartet einen Array):
Code: Alles auswählen
oCtl.model.StringItemList = oDoc.sheets.ElementNames
Zusätzlich musst Du bei der Listbox die Möglichkeit der Mehrfachauswahl zulassen - geht direkt über die IDE.
Zur Abfrage der gewählten Namen wirst Du dann im Makro den folgenen Codeschnipel verwenden:
Code: Alles auswählen
aListe = oCtl.selectedItems
For i = 0 to ubound(aliste)
sTabName = aListe(i)
....
next
Brauchst natürlich auch noch Fehlerstrukturen (bsw. wenn gar keine Tabelle gewählt wurde etc.) - aber wie gesagt - das alles ist etwas komplexer;)
Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro
ja, stimmt. (die Listbox hatte ich überlesen)ich glaube, ihr sprecht von verschiedenen Sachen
Gruß
Stephan
Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro
Vielen Dank Euch beiden!!
Tom hat recht. So hatte ich mir das vorgestellt.
Hab jetzt also was zum Probieren.
Nochmals Danke. Melde mich!!
Gruß
Martin
Tom hat recht. So hatte ich mir das vorgestellt.
Hab jetzt also was zum Probieren.
Nochmals Danke. Melde mich!!
Gruß
Martin
Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro
Mensch Tom,
es funktioniert!!! Super!
Jetzt noch in die richtige Datei verbasteln und aufhübschen. Das sollte auch noch gehen.
Danke nochmal!! Gruß
Martin
es funktioniert!!! Super!
Jetzt noch in die richtige Datei verbasteln und aufhübschen. Das sollte auch noch gehen.
Danke nochmal!! Gruß
Martin