Kästchengröße mit VBA anpassen

Hallo,

ich habe folgendes Problem. Ich möchte gerne bei Kästchen, die ich in Excel gemalt habe automatisch die Höhe und Breite verändern. Die benötigte Höhe und Breite steht z.B. in den Zellen A1 und A2 (dies sind allerdings keine festeingetragenen Zahlen, sondern berechnete Werte.)

Nun habe ich über Makro aufzeichnen (zu mehr bin ich nicht wirklich fähig) versucht genau dies zu tun, was ich möchte. Ich habe das Kästchen markiert, bin in Objekt bearbeiten gegangen und habe die Werte aus Zelle A1 (9) und A2 (10) eingetragen, okay gedrückt und die Aufzeichnung beendet.

Dann habe ich mir mein Ergebnis angeschaut:

Sub Kästchen()


ActiveSheet.Shapes(„Rectangle 5“).Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 255#
Selection.ShapeRange.Width = 283.5
Selection.ShapeRange.Rotation = 0#
End Sub

Ich hätte nun irgendwo eine 9 und eine 10 erwartet und gehofft, dass ich die durch A1 und A2 irgendwie ersetzen kann, aber dem war nicht so.

Was muss ich tun? Wer kann mir helfen?

Vielen Dank und Grüße
Anja

Hi Anja,

ich habe folgendes Problem. Ich möchte gerne bei Kästchen, die
ich in Excel gemalt habe automatisch die Höhe und Breite
verändern. Die benötigte Höhe und Breite steht z.B. in den
Zellen A1 und A2 (dies sind allerdings keine festeingetragenen
Zahlen, sondern berechnete Werte.)

du willst da eine automatische Lösung, gut. Das Problem ist Wertänderungen in A1 oder A2 durch die Berechnung einer Formel bekommt Vba nicht mit.
(Mal das Calculate-Ereignis weglassend)

Aber jede manuelle Wertänderungen in Zellen die das Ergebnis in A1 oder A2 beeinflußen bekommt Vba mit.

Beispiel, in A1 steht =B1*2 und in A2 =B2*2.

Dann könntest du im Modul des Tabellenblattes folgendes benutzen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address „$B$1“ And Target.Address „$B$2“ Then Exit Sub
Call Kästchen
End Sub

Dies bedingt in einem StandardModul, z.B. Modul1 folgenden Code:

Sub Kästchen()
Dim Rechteck As Shape
Const F As Double = 25
Set Rechteck = ActiveSheet.Shapes("Rectangle 1") 'Nummer anpassen
With Rechteck
 .Height = Range("A1") \* F
 .Width = Range("A2") \* F
End With
End Sub

Das „Modul des Tabellenblattes“ erreichst du wenn du im VB-Editor einen Doppelklick links auf den Blattnamen durchführst.

Das Standardmodul Modul1 erzeugst du durch Einfügen–Modul.
Besteht es schon, ebenfalls Doppelklick auf den Modulnamen.

Wenn du nun in B1 oder B2 andere Werte eingibst, passt sich die Rechteckgröße diesen Werten automatisch an.
Den Faktor F im Code kannst du dir ja anpassen.

Gruß
Reinhard

Nun habe ich über Makro aufzeichnen (zu mehr bin ich nicht
wirklich fähig) versucht genau dies zu tun, was ich möchte.
Ich habe das Kästchen markiert, bin in Objekt bearbeiten
gegangen und habe die Werte aus Zelle A1 (9) und A2 (10)
eingetragen, okay gedrückt und die Aufzeichnung beendet.

Dann habe ich mir mein Ergebnis angeschaut:

Sub Kästchen()


ActiveSheet.Shapes(„Rectangle 5“).Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 255#
Selection.ShapeRange.Width = 283.5
Selection.ShapeRange.Rotation = 0#
End Sub

Ich hätte nun irgendwo eine 9 und eine 10 erwartet und
gehofft, dass ich die durch A1 und A2 irgendwie ersetzen kann,
aber dem war nicht so.

Was muss ich tun? Wer kann mir helfen?

Vielen Dank und Grüße
Anja

Hallo Reinhard,

zunächst mal vielen Dank.
Ich habe auch alles so hinbekommen, dass es funktioniert und bin schon mal recht stolz auf mich.

Nun ist es bei mir so, dass ich nicht nur ein Kästchen habe, sondern insgesamt 36 Kästchen (denen ich durchgängige Nummern geben könnte, wenn das hilft), die jeweils von 4 bis 6 Ausgangszellen beeinflusst werden sollen.

Kann man über den Code eine Schleife drumrumlegen, so dass sich das nötige Kästchen automatisch verändert, wenn sich „seine“ Ausgangswerte verändern.

Mein Code sieht jetzt so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address „$L$5“ And Target.Address „$L$6“ And Target.Address „$L$7“ And Target.Address „$L$23“ And Target.Address „$L$24“ And Target.Address „$L$25“ Then Exit Sub
Call Kästchen
End Sub

Sub Kästchen()
Dim Rechteck As Shape
Const F As Double = 1
Set Rechteck = ActiveSheet.Shapes(„Rectangle 350“) 'Nummer anpassen
With Rechteck
.Height = Range(„P44“) * F
End With
End Sub

P.S.: Habe festgestellt, dass sich die Breite nicht wirklich verändert.

Grüße Anja

Hallo Anja,

Nun ist es bei mir so, dass ich nicht nur ein Kästchen habe,
sondern insgesamt 36 Kästchen (denen ich durchgängige Nummern
geben könnte, wenn das hilft), die jeweils von 4 bis 6
Ausgangszellen beeinflusst werden sollen.

Kann man über den Code eine Schleife drumrumlegen, so dass
sich das nötige Kästchen automatisch verändert, wenn sich
„seine“ Ausgangswerte verändern.

ja das geht. Der Code wird kürzer und einfacher wenn man aus einer geänderten Zelle auf das jeweilige Kästchen kommt.

D.h. Vba braucht die klare Information, schaue auf Zelleingaben, wenn diese in B2 oder C2 oder D2 geschehen so ändere die Rechteckbreite von Rechteck1 auf die Breite in A2.

Wenn diese in B3 oder C3 oder D3 geschehen so ändere die Rechteckbreite von Rechteck2 auf die Breite in A3.

P.S.: Habe festgestellt, dass sich die Breite nicht wirklich
verändert.

Warum sollte sich die Breite ändern, du änderst ja .Width nicht.

Lade mal mittels FAQ:2861 o.ä. eine Mappe hoch.

Gruß
Reinhard

Hallo,

Problem ist gelöst.

Danke und Grüße