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

Forumthread: kopierte Grafik mit Positionsangabe einfügen

kopierte Grafik mit Positionsangabe einfügen
11.09.2024 09:18:34
Udo
Guten Morgen,

ich habe mittels VBA aus Tabellen Zeichnungen incl. Bemaßungen erstellt. Dabei geht es um z.B. eine Grube + einem Graben + einer Grube für einen Mast, alles einzeln auf jeweils einem Tabellenblatt berechnet und gezeichnet.

Nun möchte ich gern diese drei (oder auch mehrere) Grafiken miteinander kombinieren. Ich beginne jede einzelne Grafik an Position von Oben 200, von links 200, möchte auch den Einfügepunkt der ersten Grafik auf von Oben 200, von links 200 setzen, die anschließende Grafik würde dann in gleich Höhe aber von links bei von links 200+Grafikbreite eingefügt werden müssen usw.

Ich habe es geschafft die einzelnen Grafiken zu programmieren, auch kann ich nun die einzelnen Grafiken alle Details makieren und kopieren, aber wie ich das dann im neuen Blatt einfüge, vor allen Dingen mit der berechneten Einfügeposition, das finde ich in der vba-Hilfe nichts.

Gibt es hier jemand, der mir sagen kann, wie ich das kopierte an eine von Oben/von Links Position wieder einfügen kann ?
Vielen Dank Udo
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kopierte Grafik mit Positionsangabe einfügen
11.09.2024 10:31:18
volti
Hallo Udo,

vielleicht hilft dieser Beitrag Dir schon weiter...
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1932369#9

Oder diese Idee....
Sub PositioniereLetzteGrafik()

' Zuletzt eingefügte Grafik positionieren
With ActiveSheet
With .Shapes(.Shapes.Count)
.Left = 150
.Top = 100
End With
End With
End Sub


Gruß
Karl-Heinz
Anzeige
AW: kopierte Grafik mit Positionsangabe einfügen
11.09.2024 15:33:14
Beverly
Hi Udo,

ich nehme an, es gibt nur 2 Grafiken (Shapes) im Tabellenblatt?

Sub KopierenPositionieren()

Dim intZaehler As Integer
Dim arrBreite()
ReDim arrBreite(0 To 2)
Dim dblLinks As Double
Application.ScreenUpdating = False
With Worksheets("Tabelle1") '== Name Quelltabelle anpassen
For intZaehler = 1 To 3
.Shapes(intZaehler).Copy
Worksheets("Tabelle2").Paste
arrBreite(intZaehler - 1) = .Shapes(intZaehler).Width
Next intZaehler
End With
With Worksheets("Tabelle2") '== Name Zieltanelle anpassen
With Worksheets("Tabelle2").Shapes(1)
.Top = 200
.Left = 200
dblLinks = 200
End With
With .Shapes(2)
.Top = 200
.Left = 200 + arrBreite(0)
End With
With .Shapes(3)
.Top = 200
.Left = 200 + arrBreite(0) + arrBreite(1)
End With
End With
Application.ScreenUpdating = True
End Sub


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: kopierte Grafik mit Positionsangabe einfügen
12.09.2024 07:53:41
Udo
um das noch einmal klar zustellen, es gibt bis zu 8 Tabellenblätter, auf jedem Tabellenblatt gibt es eine Grafik, eine solche Grafik besteht aus bis zu 100 einzelnen (laut Excel Menueleiste) Formen (Rechtecke, Kreise, Texte und Maßfeile). Der Maßstab auf allen Tabellenblättern ist immer gleich. Wie bereits erwähnt geht es um Erdarbeiten zur Straßenbeleuchtung, es gibt immer einen Anschlußpunkt, einen Graben und eine neu errichtete Beleuchtungseinrichtung. Dementsprechend gibt es eine Grafik Anschlußpunkt, eine Grafik Graben und eine Beleuchtungseinrichtung. Es können aber auch mehr Gräben und Beleuchtungspunkte vorhanden sein.
Diese Kombis (Anschlußpunkt-Graben-Beleuchtungseinrichtung) sollen nun auf einer Grafik(Zeichnung) dargestellt werden. Da die Einzelelemente jeder Zeichnung mit der Tabelle berechnet wurden und immer bei >vonObenvonLinks> 200/200 begonnen wurde, ergeben sich für folgende Zeichnungen die Einfügepunkte aus 200/200 plus der Elementgröße.
Ich habe inzwischen heraus gefunden wie pro Zeichnung/Tabellenblatt die Einzelelemente markiere und kopiere, nur wie ich das dann in ein anderes Tabellenblatt mit definierter Einfügeposition einfügen kann, dazu habe ich noch nichts gefunden.
Im übrigen gehe ich davon aus, das mehrere Elemente beginnend bei 200/200 und durch Addition der Breiten positioniert, Beispiel Start 200/200 plus Breite 175, Start nächstes Element 200+175+1=376/200 usw. gleiches für Höhenposition NACH DEM KOPIEREN als Einfügepunkt den Ursprünglichen Start von 200/200 als LinksOben übernehmen, ich meine jetzt nicht die Position 200/200, sonderen das Zeichnungselement das an das dieser Position steht. Boh, das ist schwer zu beschreiben, ich versuch mal so: a/a bneidirjged, a/d gfggggfe, a/e irfdkeoeo wenn das nun kopiert wird, gehe ich davon aus das der Anfasspunkt der Kopie von a/a übernommen wird. Hieße, die nächste Zeichnung/Grafik muss bei a/o eingefügt werden
Hier kommen leider Zeichnen und Programmieren zusammen, hoffentlich versteht jemand, was ich überhaupt will, Danke
Anzeige
AW: kopierte Grafik mit Positionsangabe einfügen
12.09.2024 08:31:17
Beverly
Wie du die Positionen der 3 Elemente (Shapes) ermittelst sieht du doch in meinem Code: für das 1. Shape ist es .Shapes(1).Left = 200 und für die anderen jeweils die Breite - also .Shapes(x).Width - des/der vorhergehenden Shapes dazu addiert.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: kopierte Grafik mit Positionsangabe einfügen
11.09.2024 11:01:47
Udo
Ich hatte zuvor eingefügt mit Angabe der Zelle B2, nach Deinem Beitrag habe ich mich auf Paste beschränkt und danach Dein Listing eingefügt.
Obwohl noch jedes Element markiert war, wurde nur ein Element an die Position verschoben, was ist mit dem Resr ?
AW: kopierte Grafik mit Positionsangabe einfügen
11.09.2024 12:57:19
volti
Hallo Udo,

ich hatte verstanden "beim Einfügen" oder nach dem Einfügen das Element positionieren.
Mein Code positioniert nur die letzte eingefügte Grafik.

Wenn Du alle Grafiken positionieren möchtest kannst Du das in einer Schleife machen. Wenn jedes auf eine andere Position kommen soll, kann man die Namen verwenden.
Ich lasse die mal in der ersten Sub ausgeben, da die englische Bezeichnung angegeben werden muss....

Wenn nur die markierten Objekte genommen werden sollen, da habe ich gerade keine Idee.

Sub Test1()

Dim oShp As Object

For Each oShp In ActiveSheet.Shapes
Debug.Print oShp.Name
oShp.Left = 100
oShp.Top = 100
Next oShp
End Sub

Sub Test2()
Dim oShp As Object

For Each oShp In Selection
With oShp
Select Case .Name
Case "Picture 6": .Left = 100: .Top = 100
Case "Picture 7": .Left = 200: .Top = 100
End Select
End With
Next oShp
End Sub


Gruß Karl-Heinz
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige