Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Rechtecke zeichnen

Rechtecke zeichnen
04.02.2017 17:46:52
Raphael
Hallo zusammen,
ist es möglich mit VBA (von dem ich leider keine Ahnung habe) Rechtecke zu zeichnen, die überlagert und in sich zentriert sind?
Die Daten für die Rechtecke sind variabel und in einer Tabelle zusammengefasst die aus Formeln gefüllt wird (in der Beispieldatei sind feste Werte, falls das einen Unterschied macht)
Die Rechtecke sind farbig gefüllt (im Beispiel unterschiedlich grün) und ohne Rand, ein Rechteck jedoch nur Rand ohne Füllung.
Ich weiß das man dann einen Button für den Start des Makros benötigt. Was ist der Unterschied hier von einem Steuerelement und einem Aktiv X Steuerelement. Wie verknüpft man dieses mit dem Makro und wohin muss das Makro kopiert werden.
Ich hoffe so etwas ist relativ einfach zu bewerkstelligen, ohne das es an Auftragsprogrammierung geht.
Vielen Dank schon mal vorab.
Hier die Beispieldatei:
https://www.herber.de/bbs/user/111192.xlsm
Gruß
Raphael
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rechtecke zeichnen
04.02.2017 17:49:35
Raphael
ach ja,
wenn man den Button nochmal drückt, weil sich die Werte in der Tabelle geändert haben, soll die alte Grafik gelöscht werden und komplett neu erstellt werden
Sorry, den Satz habe ich vergessen
Gruß
Raphael
AW: proof of concept
04.02.2017 21:29:19
Fennek
Hallo,
die Vorlage war mir zu kompliziert, aber einen Anfang

Sub T1()
W1 = Array("x", "y", "l", "b")
W2 = Array(300, 30, 200, 300)
W3 = Array(320, 50, 160, 260)
Cells(3, 1).Resize(, 4) = W1
Cells(4, 1).Resize(, 4) = W2
Cells(5, 1).Resize(, 4) = W3
For i = 4 To 5
x = Cells(i, 1)
y = Cells(i, 2)
l = Cells(i, 3)
b = Cells(i, 4)
F = Array(11, 17, 50)
ActiveSheet.Shapes.AddShape(msoShapeRectangle, x, y, l, b).Select
Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.Fill.ForeColor.SchemeColor = F(i - 4)
Next i
Debug.Print Selection.Name
End Sub
Sub Shape_loesch()
Dim WS As Worksheet
Set WS = ActiveSheet
For Each Sp In WS.Shapes
Sp.Delete
Next Sp
End Sub
Für jedes weitere Shape müßten die Koordinaten und Größe berechnet werden.
mfg
Anzeige
AW: proof of concept
05.02.2017 09:58:54
Raphael
Hallo Fennek,
danke für das Makro.
Ich habe es in die Arbeitsmappe kopiert und zwei Schaltflächen verknüpft. Wenn ich Löschen drücke sind auch die Schaltflächen weg :( was mache ich da falsch?
Kann man das Makro auch dazu bringen Werte aus der Tabelle auszulesen. Die Koordinaten kann ich separat berechnen und bereit stellen. Die Größe der weiteren Shapes im inneren habe ich ja definiert als Länge 3 und Breite 3, demnach fehlt nur der Startpunkt dazu für jedes shape, wenn ich es richtig gedeutet habe immer oben links
Danke und Gruß
Raphael
Anzeige
AW: proof of concept
05.02.2017 10:03:19
Raphael
Frage als offen gekennzeichnet
AW: Erweiterung
05.02.2017 10:53:20
Fennek
Hallo,
die Daten für die Rechtecke werden ab A4, pro Rechteck jeweils 4 Spalten, eingetragen.
Dann muss die Schleifen "For i = 4 to 5" entsprechend erweitert werden. Ich habe nur 3 verschiedene grün-Töne gefunden.
Das Löschen ist im Moment für alle Shapes eingestellt, kann auch auf Rechtecke reduziert werden.
mfg
Anzeige
AW: Rechtecke zeichnen
04.02.2017 22:05:24
Piet
Hallo Raphael,
eine Lösung von Fennek liegt ja vor, eine Frage von dir noch Offen - der Unterschied zwischen:
Steuerelement und einem Aktiv X Steuerelement
Für einfache Anwendung wie Button drücken empfehle ich den normalen CommandButton, denn dem kannst du problemlos ein Makro zuweisen, das in einem Modulblatt liegt. Das AktiveSteuerelement hat ein eigenes Codeblatt, das Makro kannst du aber nicht von einem Modul aus starten. Das startet nur "BeiKlck" Button! Einziger Vorteil, man kann bestimmte Eigenschaften extra einstellen, wie Schriftfarbe etc. Zum Programmieren gebe ich dem normalen Button den Vorzug.
mfg Piet
Anzeige
AW: Rechtecke zeichnen
05.02.2017 06:18:35
 Matthias
Hallo
Das AktiveSteuerelement hat ein eigenes Codeblatt, das Makro kannst du aber nicht von einem Modul aus starten.
Das ist falsch.
Kann man auch aus einem Modul starten.
Gruß Matthias
AW: Rechtecke zeichnen
05.02.2017 10:00:30
Raphael
Hallo Piet,
danke für die Erklärung....für mich reicht erst mal das Steuerelement
Gruß
Raphael
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Rechtecke in Excel erstellen und zeichnen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Excel-Datei: Stelle sicher, dass deine Excel-Datei die notwendigen Daten für die Rechtecke enthält. Diese sollten in einem klar definierten Bereich angeordnet sein, z.B. ab Zelle A4.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul erstellen: Klicke im Menü auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  4. Makro für Rechtecke einfügen: Füge folgenden VBA-Code in das Modul ein:

    Sub RechteckeZeichnen()
       Dim x As Single, y As Single, l As Single, b As Single
       Dim F As Variant
       F = Array(11, 17, 50) ' Farben für die Füllung
    
       For i = 4 To 5 ' Schleife für die Zeilen A4 bis A5
           x = Cells(i, 1)
           y = Cells(i, 2)
           l = Cells(i, 3)
           b = Cells(i, 4)
    
           ActiveSheet.Shapes.AddShape(msoShapeRectangle, x, y, l, b).Select
           Selection.ShapeRange.Line.Visible = msoFalse
           Selection.ShapeRange.Fill.ForeColor.SchemeColor = F(i - 4)
       Next i
    End Sub
  5. Makro zum Löschen der alten Rechtecke: Erstelle ein weiteres Makro, um die alten Rechtecke zu löschen:

    Sub RechteckeLoeschen()
       Dim WS As Worksheet
       Set WS = ActiveSheet
       For Each Sp In WS.Shapes
           If Sp.Type = msoShapeRectangle Then Sp.Delete
       Next Sp
    End Sub
  6. Schaltflächen hinzufügen: Füge zwei Schaltflächen (CommandButton) in dein Arbeitsblatt ein. Eine zum Zeichnen der Rechtecke und eine zum Löschen.

  7. Makros zuweisen: Klicke mit der rechten Maustaste auf die Schaltflächen, wähle Makro zuweisen und wähle das entsprechende Makro aus.


Häufige Fehler und Lösungen

  • Fehler beim Löschen der Schaltflächen: Wenn beim Löschen der Rechtecke auch die Schaltflächen verschwinden, stelle sicher, dass die Schleife in RechteckeLoeschen nur auf Rechtecke abzielt. Verwende die Bedingung If Sp.Type = msoShapeRectangle Then.

  • Makro läuft nicht: Überprüfe, ob alle erforderlichen Daten in den richtigen Zellen vorhanden sind. Die Koordinaten müssen korrekt sein, damit die Rechtecke sichtbar sind.


Alternative Methoden

  • Excel Formen nutzen: Anstatt VBA zu verwenden, kannst du auch die integrierten Formen in Excel nutzen. Gehe zu Einfügen > Formen und wähle das Rechteck aus. Damit kannst du manuell Rechtecke zeichnen.

  • Diagramme verwenden: Eine andere Möglichkeit, Daten visuell darzustellen, ist die Verwendung von Diagrammen. Hierbei kannst du Balken oder Flächendiagramme erstellen, die ähnliche Ergebnisse wie Rechtecke liefern.


Praktische Beispiele

  • Einfaches Rechteck zeichnen: Um ein einfaches Rechteck zu zeichnen, kannst du den folgenden Befehl im VBA-Editor verwenden:

    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 50)
  • Rechtecke mit variablen Werten: Nutze die oben beschriebenen Makros, um Rechtecke basierend auf deinen Daten zu erstellen. Ändere die Werte in den Zellen A4 bis D5 und führe das Makro erneut aus, um die Rechtecke automatisch anzupassen.


Tipps für Profis

  • Farben anpassen: Experimentiere mit verschiedenen Farbnummern in der Fill.ForeColor.SchemeColor-Eigenschaft, um die Füllfarbe deiner Rechtecke zu ändern.

  • Berechnung der Koordinaten: Du kannst die Berechnungen für die Position und Größe der Rechtecke in einem separaten Bereich deiner Tabelle durchführen, um die Übersichtlichkeit zu erhöhen.

  • Aktiv X Steuerelemente: Wenn du erweiterte Funktionen benötigst, erwäge die Verwendung von Aktiv X Steuerelementen, um mehr Anpassungsmöglichkeiten zu erhalten.


FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehr Rechtecke zu zeichnen? Erweitere die Schleife im Makro von For i = 4 To 5 auf die gewünschten Zeilen, z.B. For i = 4 To 10.

2. Was ist der Unterschied zwischen einem Steuerelement und einem Aktiv X Steuerelement? Ein normales Steuerelement kann einfach mit einem Makro verknüpft werden, während ein Aktiv X Steuerelement ein eigenes Codeblatt hat und mehr Anpassungen ermöglicht, aber auch komplizierter sein kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige