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

shape verschieben und an Zellen ausrichten

Forumthread: shape verschieben und an Zellen ausrichten

shape verschieben und an Zellen ausrichten
17.06.2006 07:57:36
Emil
Hallo,
ich habe per Hand ein shape (eine vertikale Linie) erzeugt und dabei durch Drücken der alt-Taste an den Zellecken ausgerichtet.
Wie kann ich diese Linie per vba um genau zwei Zellen nach links verschieben und dabei wieder genau an den Zellecken ausrichten.
Gruß Emil
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 10:28:26
Daniel
Hallo
Linke obere Ecke ausrichten
ActiveSheet.Shapes("ShapeName").Top = Range("gewünschte Zelle).top
ActiveSheet.Shapes("ShapeName").Left = Range("gewünschte Zelle).left
Länge Ausrichten:
ActiveSheet.Shapes("ShapeName").width = Range("gewünschte Zelle).width
Alternativ, wenn du nicht genau weißt, welche zu welcher Zelle die Linie verschoben werden soll, dann so
ActiveSheet.Shapes("ShapeName").IncrementTop -2*("gewünschte Zelle).heigth
Gruß, Daniel Eisert
Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 10:28:39
Josef
Hallo Emil!
Vom Prinzip her, geht das so.
Sub verschiebeLinie()
Dim objLine As Shape
Dim rng As Range

Set objLine = ActiveSheet.Shapes("Linie 1") 'Name der Linie! - anpassen!
Set rng = objLine.TopLeftCell

If rng.Column >= 2 Then
  With objLine
    .Left = rng.Offset(0, -2).Left
    .Top = rng.Offset(0, -2).Top
    .Height = rng.Offset(0, -2).Height
  End With
End If

Set objLine = Nothing
Set rng = Nothing

End Sub


Gruß Sepp

Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 19:53:53
Emil
Hallo Daniel und Sepp,
vielen Dank für eure Antworten. Gibt es auch eine Lösung, wenn ich den Namen der Linie nicht kenne, sondern nur weiß wo genau sie sich auf dem Arbeitsblatt befindet? Ich hatte es bisher so versucht, dass ich den umgebenden Bereich (und damit auch die Linie) ausgeschnitten und woanders hin kopiert habe, das macht aber Problem mit der Formatierung.
Gruß Emil
Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 20:09:31
Josef
Hallo Emil!
Wozu soll den das ganze gut sein?
Das hat imho nichts mehr mit Tabellenkalkulation zu tun.
Ist nur eine Linie auf dem Blatt oder mehrere?
Gruß Sepp

AW: shape verschieben und an Zellen ausrichten
17.06.2006 20:20:28
Emil
Hallo Sepp,
Hintergrund ist folgender: Ich mache ein Makro für einen häufig benötigten Nachweis bei einer technischen Berechnung. Zu diesem Nachweis gehört auch eine Skizze. Die Skizze will ich in Abhängigkeit von bestimmten Eingabe anpassen. Dazu muss ich eine Linie in der Skizze verschieben.
Der ganze Nachweis liegt als Vorlage auf einem seperaten Blatt und wird bei Bedarf per vba in das aktuelle Tabellenblatt hineinkopiert, eventuell auch mehrmals hintereinander. Daher kenne ich dann auch nicht den Namen der Linie.
Gruß Emil
Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 20:27:35
Josef
Hallo Emil!
Und wie kann man ermitteln welche Linie verschoben werden soll?
Gruß Sepp

AW: shape verschieben und an Zellen ausrichten
17.06.2006 20:38:15
Emil
Hallo Sepp,
es handelt sich immer um eine bestimmte Linie in der Skizze. Diese Linie befindet sich immer auf dem senkrechten Rand einer Zelle. Die Position dieser Zelle kann ich anhand einer Beschriftung der Skizze ermitteln. Wenn ich diese Beschriftung in der Skizze ändere soll auch die Linie entsprechend verschoben werden. Es gibt also immer einen Zusammenhang zwischen Beschriftung und Lage der Linie.
Gruß Emil
Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 21:05:26
Josef
Hallo Emil!
Wie es vom Prinzip her funktioniert, hat Daniel schon beschrieben.
Wenn du damit nicht klar kommst, dann lade am besten ein Beispiel mit der Skizze hoch(mit Beschreibung).
Gruß Sepp

AW: shape verschieben und an Zellen ausrichten
17.06.2006 20:48:07
Daniel
Hallo
wenn er ,wie er schreibt, genau weiss, wo die Linie ist (also die Zelle kennt, in der sie sich befindet), dann könnte man mit
For Each shapeVariable in Sheet(xx).shapes
if shapeVariable.TopLeftCell.Address = Range(...).address then
....
end if
Next
die entsprechende Linie schon herausfinden und verschieben.
Es werden halt alle Grafik-Objekte verschoben, die ihre linke obere Ecke in der benannten Zelle haben.
gruß, Daniel
Anzeige
AW: shape verschieben und an Zellen ausrichten
17.06.2006 20:48:08
Daniel
Hallo
wenn er ,wie er schreibt, genau weiss, wo die Linie ist (also die Zelle kennt, in der sie sich befindet), dann könnte man mit
For Each shapeVariable in Sheet(xx).shapes
if shapeVariable.TopLeftCell.Address = Range(...).address then
....
end if
Next
die entsprechende Linie schon herausfinden und verschieben.
Es werden halt alle Grafik-Objekte verschoben, die ihre linke obere Ecke in der benannten Zelle haben.
gruß, Daniel
Anzeige
AW: shape verschieben und an Zellen ausrichten
18.06.2006 10:07:29
Emil
Hallo Daniel und Sepp,
nochmals vielen Dank für eure Hilfe. Allein hätte ich das nicht geschafft. Ich mache es im Prinzip jetzt so wie Daniel vorgeschlagen hat, indem ich die Eigenschaften top und left aller Linien mit der mir bekannten Zelle vergleiche und dann die richtige Linie entsprechend verschiebe.
Einen schönen Sonntag noch!
Gruß Emil
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Shape verschieben und an Zellen ausrichten in Excel


Schritt-für-Schritt-Anleitung

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

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeinWorkbook)“ und wähle „Einfügen“ > „Modul“.

  3. Kopiere und füge den folgenden Code ein:

    Sub verschiebeLinie()
        Dim objLine As Shape
        Dim rng As Range
    
        Set objLine = ActiveSheet.Shapes("Linie 1")  ' Name der Linie anpassen!
        Set rng = objLine.TopLeftCell
    
        If rng.Column >= 2 Then
            With objLine
                .Left = rng.Offset(0, -2).Left
                .Top = rng.Offset(0, -2).Top
                .Height = rng.Offset(0, -2).Height
            End With
        End If
    
        Set objLine = Nothing
        Set rng = Nothing
    End Sub
  4. Ändere den Namen der Linie: Stelle sicher, dass der Name der Linie ("Linie 1") dem tatsächlichen Namen deiner Form entspricht.

  5. Führe das Makro aus: Drücke F5, um das Makro auszuführen und die Linie an die gewünschte Position zu verschieben.


Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“
    Lösung: Überprüfe den Namen der Form in der Shapes-Sammlung. Stelle sicher, dass der Name korrekt ist.

  • Fehler: Linie wird nicht an der Zelle ausgerichtet
    Lösung: Stelle sicher, dass die TopLeftCell korrekt referenziert wird. Du kannst auch die Eigenschaften Top und Left direkt anpassen, falls nötig.


Alternative Methoden

Wenn du den Namen der Form nicht kennst, kannst du die Position der Form basierend auf der Zelle ermitteln. Hier ein Beispiel:

Sub verschiebeUnbekannteLinie()
    Dim shapeVariable As Shape
    Dim rng As Range

    Set rng = Range("A1") ' Die Zelle, in der die Linie sich befindet

    For Each shapeVariable In ActiveSheet.Shapes
        If shapeVariable.TopLeftCell.Address = rng.Address Then
            shapeVariable.Left = rng.Offset(0, -2).Left
            shapeVariable.Top = rng.Offset(0, -2).Top
        End If
    Next shapeVariable
End Sub

Praktische Beispiele

  1. Bewege eine Linie um zwei Zellen nach links: Verwende die oben genannten Codes, um die Form an die Zelle anzupassen.
  2. Form an Zelle ausrichten: Die Methode shape.left vba kann verwendet werden, um die Position der Form an die Zelle anzupassen.

Tipps für Profis

  • Nutze die vba shapes eigenschaften, um mehr Kontrolle über das Design deiner Formen zu erhalten.
  • Experimentiere mit IncrementTop und IncrementLeft, um eine feinere Steuerung über die Positionierung zu erreichen.
  • Dokumentiere deine Makros, um die Wartung und Anpassung zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Linien gleichzeitig verschieben?
Du kannst eine Schleife verwenden, um alle Linien auszuwählen und ihre Positionen anpassen, ähnlich dem Beispiel für die unbekannte Linie.

2. Was ist der Unterschied zwischen Top und TopLeftCell?
Top bezieht sich auf die vertikale Position der Form, während TopLeftCell die Zelle angibt, in der die linke obere Ecke der Form liegt.

3. Kann ich die Form auch in einer anderen Excel-Version verwenden?
Ja, die meisten VBA-Methoden sind in den gängigen Excel-Versionen gleich, jedoch könnten einige spezifische Funktionen variieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige