Aus listbox items auswählen und Bereich kopieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox MsgBox
Bild

Betrifft: Aus listbox items auswählen und Bereich kopieren
von: Heinz Schrem
Geschrieben am: 25.05.2015 17:15:27

Guten Tag,
Ich habe folgende Herausforderung.
Ich bräuchte einen VBA code/ein Makro, das folgendes in der angehängten Datei ermöglicht:
Durchlaufe die Listbox1 im Tabellenblatt "CH1" (am besten nur speziell selektierte Listboxitems - z.B. HRC Extern und danach P&O - oder, falls dies nicht möglich ist, alle Listboxitems), kopiere den Bereich "CHRange" (= Zellenbereich B1 zu AD47) aus dem gleichen Tabellenblatt korrespondierend zu den jeweiligem ausgewählten Listboxitem in ein bestimmtes slide einer bereits bestehenden Powerpoint-Datei (also z.B wenn Listboxitem "HRC Extern" ausgewählt ist, kopiere den Bereich B1:AD47 in das slide 5 einer existierenden Powerpointdatei; dann, wenn danach "P&O" ausgewählt ist, kopiere den Bereich B1:AD47 in powerpoint slide 6 der gleichen existierenden Powerpointdatei. Usw.
Mir würde schon sehr helfen zu wissen, wie man diese listbox durchlaufen kann und je nach selektiertem listboxitem den Bereich B1:AD47 anspricht und kopieren kann (entweder in excel in ein neues Tabellenblatt oder eben idealerweise in die ppt-Datei).
Vielen Dank für jegliche Unterstützung.
Gruss,
Heinz
https://www.herber.de/bbs/user/97828.xlsm

Bild

Betrifft: AW: Aus listbox items auswählen und Bereich kopieren
von: Michael
Geschrieben am: 25.05.2015 19:09:17
Hallo Heinz,
es ist etwas tricky, in dem Listenfeld überhaupt sinnvoll eine Mehrfachauswahl zu treffen. Eine Grundsatzdiskussion zum Thema findet sich u.a. hier:
http://www.excel-inside.de/funktionen-a-tipps/895-dropdown-liste-mit-mehrfachauswahl
Damit kannst Du mal herumspielen, und wenn es tut, erhältst Du ein Feld mit Nummern, die mit Komma getrennt sind und per VBA durchlaufen werden können (siehe 2. Beispiel unten).
Deine Beispieldatei ist so komplex, daß ich mir das jetzt nicht antun will. Außerdem sieht sie so kommerziell aus, daß ich hier nicht stundenlang für lau programmieren möchte.
Offensichtlich ist Dir nicht klar, was hier überhaupt passiert, d.h. die Beispieldatei stammt nicht von Dir.
Als laß Dich etwas erleuchten: der Knackpunkt ist die Zelle A1 (Rechtsklick auf das Listenfeld, dann "Steuerelement formatieren", Register "Steuerung" und dort "Zellverknüpfung").
Was auch immer angeklickt wurde, liefert die Position in der Liste als schlichte Nummer von 1 bis 27. Die 27 für "Other" kannst Du gleich vergessen, da sind keine Daten hinterlegt.
Verbleiben die Werte von 1 bis 26: für die läßt Du eine For-Schleife durchlaufen, und der Rest des Blattes ändert sich automatisch mit der Nummer, die hier drinsteht. Also als Makro:

for i=1 to 26
Range("a1").Value = i 
' Daten zu 1 bis 26 werden nacheinander angezeigt
kopiere_alles_weg
next
Oder Du steuerst das wie oben verlinkt, also etwa: wenn in A1 (Du wirst es in der Praxis in einer anderen Zelle oder einfach einer Variablen speichern) nach der Mehrfachauswahl steht: 1,2,3 z.B. so (probier das Ding mal in einer leeren Datei aus und schreibe in A1 z.B. 1,2,3):

Sub schleife()
arr = Split(Range("a1"), ",")
For Each wert In arr
  Range("a1").Value = wert * 1
  ' mal 1 zur Konvertierung in eine Zahl
  MsgBox "statt MsgBox Daten kopieren"
Next
End Sub
Die komplette Anzeige (in CH1) baut auf dem Wert in A1 auf, wobei auf diesen nur *einmal* zugegriffen wird, und zwar in der (Spalte ausgeblendet) Zelle E26, dort steht nämlich: =INDEX(Mylist;$A$1;2)
Mit einer Kaskade weiterer INDEXe werden alle Werte angezeigt.
Wenn diese Hinweise Deinen Kenntnisstand übersteigen, solltest Du ernsthaft überlegen, das programmieren zu lassen - such Dir z.B. jemanden bei den Profilen, aber bitte nicht mich, ich habe kein aktuelles PP zum Testen.
Schöne Grüße,
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Aus listbox items auswählen und Bereich kopieren"