Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

von maro1969 » Mi, 14.12.2016 14:45

Mensch Tom,

es funktioniert!!! Super!

Jetzt noch in die richtige Datei verbasteln und aufhübschen. Das sollte auch noch gehen.
Danke nochmal!!
Arraytest.ods
(9.58 KiB) 128-mal heruntergeladen
Gruß
Martin

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

von maro1969 » Mi, 14.12.2016 13:30

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

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

von Stephan » Mi, 14.12.2016 09:07

ich glaube, ihr sprecht von verschiedenen Sachen
ja, stimmt. (die Listbox hatte ich überlesen)


Gruß
Stephan

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

von Toxitom » Mi, 14.12.2016 08:39

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):

Code: Alles auswählen

oCtl.model.StringItemList = oDoc.sheets.ElementNames
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:

Code: Alles auswählen

aListe = oCtl.selectedItems
For i = 0 to ubound(aliste) 
  sTabName = aListe(i)
  ....
next
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

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

von Stephan » Di, 13.12.2016 20:53

Gibt es da Beispiele, anhand derer auch ein in die Jahre gekommener Anfänger wie ich das hinbekommt?
Kapitel 7.1 in:
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
Gruß
Stephan

Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

von maro1969 » Di, 13.12.2016 16:05

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

Nach oben