Das Archiv des Excel-Forums

Ausdruck.AddShape / Zellpositionsbezug

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

Betrifft: Ausdruck.AddShape / Zellpositionsbezug
von: Guido

Geschrieben am: 13.10.2003 11:43:57

Hallo,

wie kann man den absoluten Bezug des VBA-Befehl: "Ausdruck.AddShape(Type, Left, Top, Width, Height)" in einen Zellpositionsbezug bringen?
Also, statt den absoluten Bezug ab der linken, oberen Tabellenecke (z.B. mit 0,0) den Bezug zur derzeit aktiven (bzw. markierten) Zelle (z.B. C9).

mfG
Guido
Bild


Betrifft: AW: Ausdruck.AddShape / Zellpositionsbezug
von: ANdreas
Geschrieben am: 13.10.2003 14:22:17

Hallo Guido,

diese Option gibt es direkt nicht, man kommt vielleicht über Umwege an eine entsprechnde Lösung.

Hier mal ein Vorschlag, leider nur mit Select.


Sub Makro3()
Dim sh As Shape
Set sh = ActiveSheet.Shapes.AddShape(msoShapeOvalCallout, 0, 0, 80#, 40#)
sh.Select
With Selection
.Characters.Text = "Kommentar"
.VerticalAlignment = xlCenter
.Cut
End With
Range("C10").Select
ActiveSheet.Paste
'Beispiel-Korrekturverschiebung
Selection.Left = Selection.Left + Columns(3).Width
Selection.Top = Selection.Top - Rows(10).Height
End Sub


Man könnte eventuell auch auf das Ausschneiden/Kopieren verzichten, wenn man die Spaltenbreiten/Zeilenhöhen aller Zellen (also alle die links bzw. drüber sind) berechnet und das Shape entsprechend verschiebt.

Hoffe das hilft weiter,
Andreas


Bild


Betrifft: AW: Ausdruck.AddShape / Zellpositionsbezug
von: Guido
Geschrieben am: 13.10.2003 15:04:32

Hi Andreas,

zuerst einmal vielen Dank, für die Hilfe !!! :-)
Da ich nicht der versierte VBA-Nutzer bin, stolper ich auch direkt über Deine Korrekturverschiebung. Wie kommt diese zum Einsatz?

Gibt es vielleicht auch die Möglichkeit mit eine Definition einer Variablen der aktiven Zelle, die dann als Koordinaten verwendet werden können?

Vielleicht ja über der "ActiveCell-Eigenschaft" und mit Hilfe der "Activate-Methode" ?

Wie auch immer, trotzdem vielen, vielen Dank für dein reply :-)

Gruß Guido


Bild


Betrifft: AW: Ausdruck.AddShape / Zellpositionsbezug
von: ANdreas
Geschrieben am: 13.10.2003 15:45:55

Hallo Guido,

hier noch mal ein etwas kommentiertes Beispiel, auch übersichtlicher weil ohne Select ;)


Sub Beispiel()
Dim sh As Shape
Dim i%, j%, iSum%, jSum%
i = ActiveCell.Width: j = ActiveCell.Height
iSum = 0: jSum = 0
'Doppelt so groß wie aktive Zelle
Set sh = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 2 * i, 2 * j)
With sh
.Fill.Solid
.Fill.Transparency = 0.5
.Fill.ForeColor.SchemeColor = 44
.TextFrame.Characters.Text = "Hier der Text"
.TextFrame.VerticalAlignment = xlVAlignCenter
.TextFrame.HorizontalAlignment = xlHAlignCenter
.TextFrame.Characters.Font.Bold = True
'Hier erfolgt Berechnung der Position
'Kumulieren der Spaltenbreiten/Zeilenhoehen bis einschl.
'der aktiven Zelle
For i = 1 To ActiveCell.Column
iSum = iSum + Columns(i).Width
Next i
For j = 1 To ActiveCell.Row
jSum = jSum + Rows(j).Height
Next j
'Setzen der berechneten Position
.Left = iSum
.Top = jSum
Application.Wait Now + TimeValue("00:00:02") 'kurz warten
'weitere Verschiebung
.Left = .Left - ActiveCell.Width
.Top = .Top - ActiveCell.Height
MsgBox "weiter"
End With
End Sub


Hierbei wird ein neues Rechteck eingefügt (mit fettem, zentriertem Text, und Farbänderung).
Danach werden die Spaltenbreiten bzw. Zeilenhöhen aller Spalten/Zeilen aufsummiert, die sich über/vor einschließlich der aktiven Zelle befinden. Das Rechteck wird dann an diese Position verschoben. Es befindet sich also rechts unter der aktiven Zelle.
Die zweite Verschiebung sollte das Rechteck genau über die Zelle verschieben.

Hoffe das hilft weiter,

Gruß
Andreas


Bild


Betrifft: AW: Ausdruck.AddShape / Zellpositionsbezug
von: Guido
Geschrieben am: 13.10.2003 16:04:45

Hi, ich bin's noch mal...

Das jetzige Ergebnis haut mich glatt um !!! Genau nach meinen Vorstellungen !!!
Find ich echt prima !!! Vielen Dank noch einmal. :-)

Gruß Guido


 Bild