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

VBA von Autoform Position ermitteln

Forumthread: VBA von Autoform Position ermitteln

VBA von Autoform Position ermitteln
15.11.2018 21:43:03
Autoform
Hallo Forum,
ich sollte evtl. eure Kenntnisse anzapfen mit folgendem Ansatz den ich gerne realisieren möchte.
Generell suche ich nach einer Lösung, eine Autoform ( Rechteck oder Textfeld ) sozusagen auszulesen bzgl. der Eigenschaftswerte ( Position ( Höhe - Breite ) und Länge ).
Ideal wäre eine Prozedur die klar erkennt - zunächst welche Autoform ausgewählt wird ... dann würde ich Sie von ihrer Position etwas verschieben, evtl auch mal rechts die Länge bestimmen - und wenn ich Sie verlasse ( indem ich zB. in eine Zelle klicke, oder eine andere Autoform auswähle, dann sollten die oben genannten Parameter sich in bestimmte Zellen schreiben.
Das man eine Autoform andersrum aus Zellwerten her beeinflussen kann ist mir klar, aber geht es auch eben andersrum ? Habt ihr ne Idee ?
AF. aus Zellen beeinflussen zB. so ...
ActiveSheet.Shapes.Range(Array("Rectangle 1")).IncrementLeft [A1].Value
ActiveSheet.Shapes.Range(Array("Rectangle 1")).IncrementTop [A2].Value
ActiveSheet.Shapes.Range(Array("Rectangle 1")).ScaleWidth [A3].Value, msoFalse, msoScaleFromMiddle
aber sozusagen vor Verlassen letzte Werte festhalten - aber wie, geht das überhaupt ?
Wäre für jede Idee empfänglich, schöne Grüße
Udo
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
okay, hab doch noch etwas dazu gefunden ...
15.11.2018 23:05:57
udo
Anbei eine Beispieldatei :
https://www.herber.de/bbs/user/125420.xlsm
Darin enthaltene Codes :
' ========================================================================================================================================

Function getObjPos(ObjName As String, Optional xPos As Boolean = True)
'       ======================================================================================== _
Application.ScreenUpdating = False
' returns position of shape for given shape name optional boolean parameter for x or y - _
position
' x-position is default
' 06-2006  E.Bimczok   Beitrag : https://microsoft.public.de.excel.narkive.com/sR9hFc7D/ _
autoformen-objektpositionierung-auslesen
Application.Volatile
Dim myObj As Object
'  Set a = ActiveSheet
For Each myObj In ActiveSheet.Shapes
If myObj.Name = ObjName Then
If xPos Then
getObjPos = myObj.Left
Else
getObjPos = myObj.Top
End If
Exit For
End If
Next myObj
Application.ScreenUpdating = True
End Function

' ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub verschieben()
'       ---------------------------------------------------------------------------------------- _
ActiveSheet.Shapes.Range(Array("Rectangle 1")).Left = [B2].Value
ActiveSheet.Shapes.Range(Array("Rectangle 1")).Top = [B3].Value
'        ActiveSheet.Shapes.Range(Array("Rectangle 1")).ScaleWidth = [B3].Value
End Sub

' ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub ermitteln()
'       ---------------------------------------------------------------------------------------- _
[B2] = getObjPos("Rectangle 1")
[B3] = getObjPos("Rectangle 1", False)
End Sub

' ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub Auswahl()
'       ---------------------------------------------------------------------------------------- _
Application.ScreenUpdating = False
ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
Application.ScreenUpdating = True
End Sub

LG udo
Anzeige
Nun sollte ich noch den Wert für die Breite ...
15.11.2018 23:08:44
udo
.. oben in der Function anführen , dass der Wert dann in B3 festgehalten wird
Könntet ihr mir dabei helfen ?
LG udo
AW: Nun sollte ich noch den Wert für die Breite ...
16.11.2018 13:58:59
Matthias
Moin!
Also du willst die Breit in Zelle B4 haben oder? In B3 steht doch schon die Höhe. Habe mal die Funktion angepasst. aus Boolean habe ich long gemacht. Bei 1 kommt der linke Abstand, bei 2 der höchste Punkt un dbei 3 sollte die Breite kommen. Ist aber ungetestet. Der AUfruf dann wie bei der Sub ermitteln
Function getObjPos(ObjName As String, Optional xPos As Long = 1)
'       ======================================================================================== _
_
Application.ScreenUpdating = False
' returns position of shape for given shape name optional boolean parameter for x or y - _
_
position
' x-position is default
' 06-2006  E.Bimczok   Beitrag : https://microsoft.public.de.excel.narkive.com/sR9hFc7D/ _
_
autoformen-objektpositionierung-auslesen
Application.Volatile
Dim myObj As Object
'  Set a = ActiveSheet
For Each myObj In ActiveSheet.Shapes
If myObj.Name = ObjName Then
If xPos = 1 Then
getObjPos = myObj.Left
ElseIf xPos = 2 Then
getObjPos = myObj.Top
Else
getObjPos = myObj.Width
End If
Exit For
End If
Next myObj
Application.ScreenUpdating = True
End Function
Sub ermitteln()
[B2] = getObjPos("Rectangle 1")
[B3] = getObjPos("Rectangle 1", 2)
[B4] = getObjPos("Rectangle 1", 3)
End Sub
VG
Anzeige
Hallo Matthias, perfekt ! Vielen lieben Dank, ...
16.11.2018 15:00:26
udo
habs gerade probiert, funktioniert prima, das hilft mir jetzt sehr
Lieben Dank für deine Mühe
LG udo
abschließend noch die Beispieldatei ...
16.11.2018 16:07:13
udo
... für alle die das Thema auch gerne mal aufgreifen wollen / müssen
LG
https://www.herber.de/bbs/user/125441.xlsm
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Autoform Position in Excel mit VBA ermitteln


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt.
  2. Füge eine Autoform (z.B. ein Rechteck) hinzu, indem du auf "Einfügen" > "Formen" > "Rechteck" klickst.
  3. Aktiviere den VBA-Editor mit ALT + F11.
  4. Erstelle ein neues Modul:
    • Klicke im VBA-Editor auf "Einfügen" > "Modul".
  5. Füge den folgenden Code ein, um die Position der Autoform zu ermitteln:
Function getObjPos(ObjName As String, Optional xPos As Long = 1)
    Application.ScreenUpdating = False
    Dim myObj As Object
    For Each myObj In ActiveSheet.Shapes
        If myObj.Name = ObjName Then
            If xPos = 1 Then
                getObjPos = myObj.Left
            ElseIf xPos = 2 Then
                getObjPos = myObj.Top
            Else
                getObjPos = myObj.Width
            End If
            Exit For
        End If
    Next myObj
    Application.ScreenUpdating = True
End Function
  1. Erstelle eine Subroutine zum Ermitteln und Schreiben der Position:
Sub ermitteln()
    [B2] = getObjPos("Rechteck 1")
    [B3] = getObjPos("Rechteck 1", 2)
    [B4] = getObjPos("Rechteck 1", 3)
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe die Subroutine ermitteln aus, um die Position in die Zellen B2 (links), B3 (oben) und B4 (Breite) zu übertragen.

Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"

    • Stelle sicher, dass der Name der Autoform korrekt ist. Du kannst den Namen in den Formatauswahloptionen überprüfen.
  • Lösung: Bildschirmlastigkeit

    • Wenn die Bildschirmaktualisierung nicht funktioniert, stelle sicher, dass Application.ScreenUpdating am Anfang und Ende der Funktion korrekt gesetzt ist.

Alternative Methoden

Du kannst auch die Position von Autoformen in Excel ohne VBA ermitteln, indem du die Eigenschaften im Formatierungsbereich überprüfst. Wähle die Autoform aus, gehe zu "Format" und schaue unter "Größe und Eigenschaften".


Praktische Beispiele

Hier ist ein Beispiel, wie du die Position einer Autoform in eine Zelle schreiben kannst. Angenommen, du hast eine Autoform mit dem Namen "Rechteck 1":

Sub Beispiel()
    Dim xPos As Double
    Dim yPos As Double
    xPos = getObjPos("Rechteck 1")
    yPos = getObjPos("Rechteck 1", False)
    MsgBox "Die Position ist: " & xPos & ", " & yPos
End Sub

Tipps für Profis

  • Nutze Fehlerbehandlung in deinen VBA-Skripten, um unerwartete Probleme zu vermeiden.
  • Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind.
  • Experimentiere mit verschiedenen Autoformen, um deren Position zu ermitteln und zu manipulieren.

FAQ: Häufige Fragen

1. Wie kann ich die Position einer Autoform dynamisch aktualisieren?
Du kannst die Subroutine ermitteln in Ereignisprozeduren wie Worksheet_SelectionChange einfügen, um die Position automatisch zu aktualisieren, wenn du eine andere Zelle auswählst.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen. Achte darauf, dass du die Autoform-Namen korrekt anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige