Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

AddShape zeichnet versetzt

AddShape zeichnet versetzt
29.05.2008 15:19:00
Thomas
Hallo,
habe seit dem Umstieg von Excel2003 zu 2007 Probleme mit Code, der sich unter 2007 anders verhält.
Bis jetzt nahm ich noch an, es liegt an mir, aber jetzt bin ich hier im Archiv fündig geworden.
Unter:
https://www.herber.de/forum/archiv/320to324/t322677.htm#322677
gibt es folgenden Code:

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


Dieser zeichnet ein Rechteck. Nimmt man unter Excel2007 als Beispiel die Zoomstufe 90% und setzt die Zeilenhöhen z.B. der Zeilen 1-20 auf 20 Punkte hoch, wird das Rechteck z.B. in Zelle C15 versetzt gezeichnet.
Könnt Ihr den Fehler nachvollziehen und viel wichtiger: habt ihr eine Idee, dies zu umgehen?
Hier mein ursprünglicher (sehr gekürzter) Code:
Dim r As Range
Set r = ActiveCell 'Oval wird mit durchsichtiger Füllfarbe, schwarz und 0,75 dick über 2 Spalten gezeichnet
With ActiveSheet.Shapes.AddShape(msoShapeOval, r.Left, r.Top, 2 * r.Width, r.Height)
.Fill.Visible = msoFalse
.Line.Weight = 0.75
.Line.ForeColor.RGB = RGB(0, 0, 0)
End With
Über Eure Hilfe würde ich mich sehr freuen!
MfG
TomTau

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: AddShape zeichnet versetzt
29.05.2008 17:15:00
fcs
Hallo TomTau,
aus leidvoller Erfahrung bei der Dimensionierung/Positionierung von Shape-Objektion bei früheren Excelversionen verwende ich grundsätzlich die Top und Left-Eigenschaft der Zelle(n) als Ausgangswerte. Damit hatte ich noch nie Probleme.
Für eine Ellipse, die genau in die aktive Zelle und die rechte Nachbarzelle eingepasst wird _ muss der Code dann wie folgt aussehen.

Sub aatest()
Dim r As Range
Set r = ActiveCell
'Oval wird mit durchsichtiger Füllfarbe, schwarz und 0,75 dick über 2 Spalten gezeichnet
With ActiveSheet.Shapes.AddShape(msoShapeOval, r.Left, r.Top, _
(r.Offset(0, 2).Left - r.Left), r.Offset(1, 0).Top - r.Top)
.Fill.Visible = msoFalse
.Line.Weight = 0.75
.Line.ForeColor.RGB = RGB(0, 0, 0)
End With
End Sub


Es ist also evtl. ein Problem der richtigen Parameter-Wahl, weniger der Excel-Version.
Falls in Excel 2007 ein anderes Maß für die Höhe und Breite eines Range-Objektes eingeführt wurde, abweichend von der Top/Left Position, dann gibt es Probleme. Davon weiss ich nichts.
Der Zoom-Faktor sollte eigentlich überhaupt keine Rolle bei der Positionierung spielen.
Gruß
Franz

Anzeige
AW: AddShape zeichnet versetzt
30.05.2008 08:34:25
Thomas
Hallo Franz,
danke, dass Du antwortest, aber:
Hat Du Dir meinen Code kurz angesehen?
Dieser benutzt nämlich .Top und .Left!
Leider tritt der Fehler trotzdem auf.
Natürlich gehe ich auch davon aus, dass der Zoomfaktor keine Rolle spielen DARF...
Ich habe versucht, den Fehler mit einem Umweg zu umgehen:
-Bildschirmaktualisierung ausschalten
-Zoomfaktor zwischenspeichern
-Zoom auf 100% setzen
-Oval zeichnen
-und dann alles wieder zurücksetzen.
Das klappt auch, doch der Bildschirmneuaufbau mit dem Flackern ist für meine Zwecke zu störend, da hintereinander oft viele Ovale gezeichnet werden müssen.
.Top + .Left usw. gibt es auch in Excel2007 in der gleichen Form...
Gibt es denn keinen anderen Ausweg?
MfG
TomTau
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige