Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

per VBA shapes mit Muster füllen

per VBA shapes mit Muster füllen
07.02.2017 12:04:49
Michael
Hallo alle miteinander,
Ich habe folgendes Problem. Ich möchte verschiedene Sachverhalte aus Parteimitgliederstatistiken in einer von mir in Excel angefertigten Karte zu den einzelnen Kreisverbänden darstellen.
Dabei möchte ich zwei Eigenschaften der jeweiligen Kreise einander gegenüberstellen. Die soll so realsiert werden, dass Eigenschaft1 durch eine Farbe und Eigenschaft2 durch ein schwarzes Muster, das über der Farbe liegt, dargestellt wird.
Ich muss zugeben, dass ich von VBA so gut wie keine Ahnung habe.
Den Projekteil mit dem einfärben der Shapes habe ich schon anhand einer Beschreibung im Internet hinbekommen (https://www.youtube.com/watch?v=RfjCkHK2TXM)
Hier ist der Code des entsprechenden Makros

Sub Shading()
For i = 6 To 49
Range("actReg").Value = Range("ShadingMacros!A" & i).Value
ActiveSheet.Shapes(Range("actReg").Value).Select
Selection.ShapeRange.Fill.ForeColor.RGB = Range(Range("actRegCode").Value).Interior.Color
Next i
Range("I16").Select
End Sub

Soweit wie ich es verstanden habe, greift das Programm die Farbe, die unter "actRegCode" abgelegt ist, und füllt damit das entsprechende Shape (aus der "actReg"-Liste) und springt dann in die nächste Zeile.
Wie gesagt dieser Teil des Programms funktioniert bereits ganz gut.
Ich habe nun ein ähnliches Tabellenblatt für meine Muster(ShadingMacros_Muster) mit einer Liste der Shapes "actReg2" aufgesetzt und die Muster, auf die das Programm unter "actRegcode2" zugreifen soll, von "class7" bis "class13" benannt.
Ich habe dann ein neues Makro erstellt und den Code folgendermaßen Code verändert(Änderungen _
kursiv):

Sub Shading2()
For i = 6 To 49
Range("actReg2").Value = Range("ShadingMacros_Muster!A" & i).Value
ActiveSheet.Shapes(Range("actReg2").Value).Select
Selection.ShapeRange.Interior.Pattern = Range(Range("actRegCode2").Value). _
Interior.Pattern

Next i
Range("I16").Select
End Sub

Leider funktioniert es nicht. (Laufzeitfehler 438)
Bitte schlagt mich nicht, wenn ich irgendeinen Anfängerfehler gemacht habe. Ich nur ein einfacher Nutzer der mit Programmieren eigentlich nix am Hut hat und gerade versucht sich in VBA hineinzufitzen.
Was müsste ich verändern, dass es funzt?
Vielen Dank schon mal im Voraus.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispielmappe ? (owT)
07.02.2017 14:43:20
EtoPHG

AW: Beispielmappe ? (owT)
07.02.2017 16:25:38
Michael
Ich habe mal die wichtigsten Stellen meiner Mappe "ShadingMacros_Muster" zusammenkopiert und in diesem jpeg zusammengestellt
Userbild
AW: Beispielmappe ? (owT)
07.02.2017 16:34:20
Hajo_Zi
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Schau mal hier
Eine hochgeladene Arbeitsmappe bzw. ein geposteter Tabellenausschnitt dagegen, erhöhen die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese Mappe mit einem aussagekräftigen Dateinamen hoch oder benutze ein Tool zur Tabellenanzeige.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, solltest du diese Daten anonymisieren bzw. pseudonymisieren.
Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms).

Jul 2014
 C
29Falsch
30496

verwendete Formeln
Zelle Formel Bereich N/A
C29=C27=C28  
C30=SUMMEWENN([Bildschirm.xlsm]Statistik!$Q$44:$Q$54;"<" &HEUTE();[Bildschirm.xlsm]Statistik!$R$54)  
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 18.07 einschl. 64 Bit



Anzeige
AW: Beispielmappe ? (owT)
07.02.2017 17:25:51
Hajo_Zi
Gut im ersten Beitrag ging es um VBA. VBA wurde jetzt abgelehnt, da XLSX Datei. In der Datei kann Dein Code nicht enthalten sein.
Ich habe mir das jetzt nicht angesehen ob es mit Formeln geht. Das ich nicht der Formelmensch bin.
Gruß Hajo
Mappe ohne Shapes...
08.02.2017 10:49:02
EtoPHG
Hallo Michael,
- Ich sehe verschiedene Farben in Zellen von Spalte A
- Ich sehe verschiedene Muster in Spalte J
Was ich nicht sehe, aber bräuchte für einen sinnvollen Vorschlag
- Shapes, wo auf welchem Blatt?
- Eingaben, Auswahl, Regeln, Bedingungen unter welchen was, wie eingefärbt und/oder gemustert werden soll?
Deine Code-Fragmente sind nicht sehr hilfreich. Eine genauere Beschreibung, was du willst allerdings schon.
Gruess Hansueli
Anzeige
AW: Mappe ohne Shapes...
08.02.2017 11:42:51
Michael
Hallo Hanseuli,
danke das, Du mir helfen möchtest. Leider kann ich keine Beispielmappe mit den Shapes hochladen, wei die Datei die zugelassenen 300 kB weit übersteigt. Ich habe deshalb mal die Orignialdatei bei Microsft Onedrive hochgeladen.
Hier ist der Link: Klick
AW: Mappe ohne Shapes...
08.02.2017 11:44:52
Michael
Mist der Hyperlink funktioniert nicht.
Dann eben so. Hier der Link: https://1drv.ms/x/s!ArNYrpaVTdu6bIK4aumGLSVzflk
AW: Mappe ohne Shapes...
08.02.2017 13:54:45
Michael
Also im Tabellenblatt "Karte A4" befindet sich die Karte aus Shapes. Deren Namen korellieren mit den Namen der Kreise ind den "RegData"- bzw. "RegData2"-Tabellen in den Tabellenblättern "ShadingMacrosFarbe" bzw. "ShadingMacrosMuster".
Ebenfalls auf dem Tabellenblatt "Karte A4" befinden sich zwei Listenboxen mit denen man verschiedene Eigenschaften auswählen kann, die dann in der Shape-Karte dargestellt werden sollen. Die erste Listenbox ist mit dem Tabellenblatt "ShadingMacrosFarbe" und dem Marco "Shading" verbunden. Dieser Teil funktioniert schon. Die zweite Listenbox ist für die Darstellung der Muster gedacht und bezieht sich auf das Tabellenblatt "ShadingMacrosMuster" und das Macro "Shading2"
Für die Listenboxen gibt jeweils ein Tabellenblatt "Selector Items Farbe" bzw. "Selector Items Muster".
Dort sind die Inhalte der Listenboxen und die Bereichswerte für die entsprechenden Farben und Muster je nach Auswahl festgelegt. Je nachdem welche Eigenschaft man in den Listenboxen auswählt, werden unter "Metric 2" die entsprechenden Bereichwerte ausgewält, und an die Tabellen "clsValues" bzw. "clsValues2" in den Tabellenblättern "ShadinMacrosFarbe" bzw. "ShadingMacrosMuster" weitergegeben. Das funktioniert soweit.
In den Tabellenblättern "Datentabelle Karte Farbe" bzw. "Datentabelle Karte Muster" sind die jeweiligen Datenreihen zu den in den Listenboxen stehenden Eigenschaften hinterlegt. Die in den Listenboxen getroffene Auswahl wird unter Metric angezeigt. Diese Auswahl wird dann wieder an die Tabellen RegData-Tabellen in den "ShadingMacros"-Tabellenblättern weitergegeben (Sie sind in der Funktion beide identisch aufgebaut). Das funktionier auch.
In den "ShadingMacros"-Tabellenbättern gibt es dann die oben schon erwähnte Tabelle "clsValues". Dort tauchen dann, wie erwähntm die Datenbereiche wieder auf nach denen gefärbt bzw. gemustert werden soll. Links neben den Werten sind dann Felder mit der entsprecheden Farbe oder Muster. Diese bleiben statisch während die Werte dynamisch sind. Die Farb- bzw. Musterzellen sind in "class0 bis class6" bzw "class7 bis class13" umbenannt. Es sind die Farben oder Muster, mit denen die Shapes gefüllt werden sollen.
Unter der Tabelle "clsValues" befindet sich noch eine kleine Tabelle mit "ActReg" (Das ist der Name des Shapes das gefüllt werden soll. Dieser korelliert auch mit der Tabelle RegData), "ActRegValue" (hier ist eine Formel mit SVERWEIS hinterlegt, die den Wert holt, der zu füllenden Shape entspricht) und "ActRegCode" (Hier liegt eine Formel mit SVERWEIS dahinter, die dem eben ausgewählten Wert eine "class" zuweist. Das funktioniert auch schhon.
Jetzt kommt der Haken wo es bei den Farbei funktioniert aber bei den Mustern nicht. Das Macro "Shading" ist für die Farben zuständig. Es durchläuft die einzelnen Shapenamen in der Tabelle "regData" Schaut dann under "ActRegCode" nach welche Farbe bei der entsprechenden "class" hinterlegt ist und färbt das Shape dementsprechend und springt zum nachsten Shapenamen in "RegData" usw. Das funktionier bei der Farbe auch schon soweit (es treten noch kleinere Fehler auf, die aber mit den Zahlenwerten in den Datentabellen zusammenhängen).
Das Macro "Shading2" soll das gleiche für die Muster machen. Es sollen also schwarze Muster auf die vorher mit Farben gefüllten Shapes gelegt werden. Und das funktioniert eben noch nicht. Ich vermute, dass ich im Macro "Shading2" irgendeinen Fehler gemacht habe.
Vielen Dank für Eure Geduld mit mir.
Gruß Michael
Anzeige
Shapes per VBA mit Muster füllen
09.02.2017 09:44:51
Michael
wollte mich nur noch einmal bemerkbar machen
AW: Shapes per VBA mit Muster füllen
09.02.2017 12:48:30
Michael
Ich habe gerade gemerkt, dass es über Microsoft OneDrive auch nicht so ohne weiteres funktioniert.
Hier nun ein Dritter Anlauf.
Ich habe die Datei hier hinterlegt: https://www.dropbox.com/s/hfoqyuy597o8et6/Mitgleiderstatistiken_Kreise_versuch.xlsm?dl=0
Mal sehen ob es jetzt jemand etwas damit anfangen kann
Division durch 0 führt zum Disaster...
10.02.2017 18:52:23
EtoPHG
Hallo Michael,
Da hast du ja ne Riesenarbeit gemacht.
Aber halt, wie so oft: Zuerst auf die Form (Farben, Formatierungen, Schriften etc.) konzentriert und jetzt zeigen sich die Teufel in den Funktionen. Darum nur ein paar Grundsätze, denn das Ganze geradezuziehen bedeutet einen Aufwand von Tagen.
a) Formeln die auf einen Fehlerwert hinauslaufen, sollten mit =WENNFEHLER(Formel;WertFallsFehler) fehlertolerant gemacht werden. Dein Code scheitert an all den #DIV/0! Fehlerwerten. Also, alle Divisions-Formeln geradeziehen.
b) Der Ganze CodeAnzatz über diverse Umwege von Formeln, Benannten Zellen, .Selects für die Farb- und Muster-Makros ist viel zu kompliziert. Du hast ja alles auf dem Karten-Blatt, also Farbe und Muster auf Basis der Wertgrenzen aus der Legende ziehen.
c) Einige Grundlagen zu VBA solltest Du dir dringend aneignene. Lese erst mal die Geschichte vom Malermeister und seinem Gesellen. Unter der Webaddresse des Links, findest du noch viele andere Tipps und Tricks.
Gruess Hansueli
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige