Erkennen von Formbewegung und Makroausführung
04.02.2018 20:19:44
Formbewegung
ich möchte, dass bei Bewegung einer speziellen Form auf dem Arbeitsblatt ein Makro ausgeführt wird.
Die Formen sind bereits eindeutig beschriftet auf dem Arbeitsblatt vorhanden als "FormA1", "FormA2" etc. Wird eine der Formen bewegt, soll ein Makro, welches den Y-Wert der Form im Diagramm "GruppierenA" berechnet und ausgibt, ausgeführt werden.
Das Makro zum ausführen funktioniert bereits. Allerdings muss ihm noch der Name der Form als String F übergeben werden.
Probleme habe ich bei der "Überwachung" des Arbeitsblattes, ob eine Form verschoben wurde. Hier verstehe ich aktuell nur, wie ich erfahre ob eine Zelle markiert wurde oder nicht. Wie das ganze für Form (Objekte?) funktioniert ist mir leider noch nicht klar.Unter Tabelle 1 (Diagramm) im VBA Code sind weitere Verständnisfragen im Bereich des Codes als Kommentare beschrieben.
Hoffe mir kann hier jemand weiterhelfen was für Fehler ich habe :)
Vielen Dank schonmal für die Mühe!
Lg David
Ps.: Bei Fragen einfach kurz kommentieren ich versuche so schnell wie möglich zu antworten!
Die Excel Version ist: Excel 2016
Die Datei lade ich als file hoch https://www.herber.de/bbs/user/119539.xlsm
Hier der Code des Microsoft Excel Objekt; Tabelle1 (Diagramm) mit den Grundlegenden Fragen:
Private Sub Worksheet_Selection(ByVal Target As Range)
'1. Hauptfrage: Wie erfasse ich, dass die Form mit dem speziellen Namen auf dem Blatt _
verschoben wurde?
'2. Ist die Funktion Worksheet_Selection die richtige? Oder brauche ich hier eine andere _
Funktion/Klasse etc?
'3. Ist der Unterschied ByVal -> Kopieren und ByRef -> Verlinken ?
'4. Was für Werte (Name von Formen, Position von Formen, Zellen etc) kann ich über _
Worksheet_Selection prüfen?
'5. Wird alles, was im Bereich "Tabelle1 (Diagramm) im Hintergrund in einer Endlos-Schleife _
ausgeführt? Und wenn ja kann man dies sinnvoller implementieren?
'Wenn Form mit dem Namen "FormA1" bewegt wird
If Target.Address ActiveSheet.Shapes("FormA1").ShapeRange.IncrementLeft Or ActiveSheet. _
Shapes("FormA1").IncrementTop Then
Dim F As String
F = "FormA1"
'Dann rufe das Makro YachseUebertragen auf
Call YachseUebertragen.YachseUebertragen(F)
End Sub
Und hier das Makro das ausgeführt werden soll, sobald eine Form mit dem Namen Bewegt wird:
Sub YachseUebertragen(F As String)
' Überträgt automatisch den Y-Achsen Wert
'Geht zum Worksheet
Worksheets("Diagramm").Activate
'Fügt die Bewertung über die Formen ein
'Legt benötigte Variablen fest
Dim GruppierenAtop As Double 'GruppierenAtop = Grafik A
Dim GruppierenAleft As Double
Dim WertebereichTop As Double 'Wertebereich der Grafik
Dim WertebereichLeft As Double
Dim Ftop As Double 'Ftop= Form Position
Dim Fleft As Double
Dim Yachse As Double
GruppierenAtop = Worksheets("Diagramm").Shapes("GruppierenA").Top
GruppierenAleft = Worksheets("Diagramm").Shapes("GruppierenA").Left
'Legt Wertebereich fest
WertebereichTop = GruppierenAtop + 33
WertebereichLeft = GruppierenAleft + 57
'Legt Position von Form fest
Ftop = ActiveSheet.Shapes(F).Top
Fleft = ActiveSheet.Shapes(F).Left
MsgBox ("Jetzt kommt Grafik")
MsgBox (GruppierenAtop)
MsgBox (GruppierenAleft)
MsgBox ("Jetzt kommt Wertebereich")
MsgBox (WertebereichTop)
MsgBox (WertebereichLeft)
MsgBox ("Jetzt kommt Form")
MsgBox (Ftop)
MsgBox (Fleft)
'Prüft ob Form auf Diagramm eingeordnet ist und legt Y-Achsenwert fest
If Ftop >= WertebereichTop - 5 And Ftop If Fleft >= WertebereichLeft - 5 And Fleft If Ftop - WertebereichTop Yachse = 0.5
ElseIf Ftop - WertebereichTop > 14 And Ftop - WertebereichTop Yachse = 0.6
ElseIf Ftop - WertebereichTop > 41.5 And Ftop - WertebereichTop Yachse = 0.7
ElseIf Ftop - WertebereichTop > 69 And Ftop - WertebereichTop Yachse = 0.8
ElseIf Ftop - WertebereichTop > 96.5 And Ftop - WertebereichTop Yachse = 0.9
ElseIf Ftop - WertebereichTop > 124 And Ftop - WertebereichTop Yachse = 1
ElseIf Ftop - WertebereichTop > 151.5 And Ftop - WertebereichTop Yachse = 1.1
ElseIf Ftop - WertebereichTop > 179 And Ftop - WertebereichTop Yachse = 1.2
ElseIf Ftop - WertebereichTop > 206.5 And Ftop - WertebereichTop Yachse = 1.3
ElseIf Ftop - WertebereichTop > 234 And Ftop - WertebereichTop Yachse = 1.4
ElseIf Ftop - WertebereichTop > 261.5 And Ftop - WertebereichTop Yachse = 1.5
ElseIf Ftop - WertebereichTop > 289 And Ftop - WertebereichTop Yachse = 1.6
ElseIf Ftop - WertebereichTop > 316.5 And Ftop - WertebereichTop Yachse = 1.7
ElseIf Ftop - WertebereichTop > 344 And Ftop - WertebereichTop Yachse = 1.8
End If
End If
End If
'Gibt Y-Achsenwert der Form "FormA1" aus
MsgBox (Yachse)
End Sub