Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Objektanimation





Frage

Hallo ich möchte gerne ein Objekt (Rechteck) von einem Punkt zu einem anderen bewegen lassen, nachdem ich auf einen Button geklickt habe. Dies soll mit einem VBA Scipt geschehen. Ich bin ein totaler Anfänger und habe noch überhaupt keine Ahnung in VBA. Über eine Antwort würde ich mich sehr freuen!

Antwort 1 von coros

Hallo Ecks,

nachfolgend mal drei Makros, mit denen ein Rechteck, dass den Namen "Rechteck 1" hat, von links nach Rechts im zeitlichen Abstand von 500 Millisekunden umd 25 Pixel nach rechts verschiebt. Mit dem Makro "Bewegen_start" startest Du die Bewegung. In diesem Beispiel wird auch die Füllfarbe des Rechtecks je nach Position von grün über gelb in rot verändert. Das kann aber auch aus dem Makro gelöscht werden. Wo, habe ich im Makro beschrieben.
Bei Bedarf kann über das Mako "Bewegen_stopp" das Rechteck auch gestoppt werden.

Kopiere die Makros in ein StandardModul und starte sie z.B. über eine Befehlsschaltfläche.

Option Explicit

Public Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long)
Public iBewegung As Integer
Public Stopp As Boolean

Sub Bewegen_stopp()
Stopp = True
End Sub

Sub Bewegen_start()
Stopp = False
'Variable "iBewegung" auf den Wert 0 setzen
iBewegung = 0
'Das Rechteck  mit dem Namen "Rechteck 1"...
With ActiveSheet.Shapes("Rechteck 1")
'...in die Anfangsposition verschieben
.Left = 1
'...Rechteck mit der Farbe grün füllen
.Fill.ForeColor.SchemeColor = 17
End With
'Makro für 500 Millisekunden anhalten
Call Sleep(500)
'Das Makro "Bewegen" starten
Bewegen
End Sub

Sub Bewegen()
If Stopp = True Then Exit Sub
'Bewegt das Rechteck mit dem Namen "Rechteck 1" um 25 Pixel nach rechts
ActiveSheet.Shapes("Rechteck 1").IncrementLeft 25
'Übergibt die Steuerung wieder an das Betriebssystem
DoEvents
'Makro für 500 Millisekunden anhalten, hierrüber wird _
 das eigentliche Bewegen realisiert, da das Makro alle _
 500 mSek neu gestartet wird. Das Ganze solange, bis die _
 Variable "iBewegung" einen bestimmten Wert enthält
Call Sleep(500)
'Die Variable "iBewegung" um den Wert 1 erhöhen
iBewegung = iBewegung + 1
'Wenn die Variable "iBewegung" gleich dem Wert 5, _
 dann Rechteck mit dem Namen "Rechteck 1" mit der Farbe gelb füllen _
 Befehlszeile, kann wenn kein Farbumschlag gewünscht, gelöscht werden
If iBewegung >= 5 Then _
    ActiveSheet.Shapes("Rechteck 1").Fill.ForeColor.SchemeColor = 5
'Wenn die Variable "iBewegung" gleich dem Wert 15, _
 dann Rechteck mit dem Namen "Rechteck 1" mit der Farbe rot füllen _
 Befehlszeile, kann wenn kein Farbumschlag gewünscht, gelöscht werden
If iBewegung >= 15 Then _
    ActiveSheet.Shapes("Rechteck 1").Fill.ForeColor.SchemeColor = 10
'Wenn die Variable "iBewegung" gleich dem Wert 20, _
 dann das Makro beenden, da Endpunkt erreicht. Der Wert 20 _
 bedeutet, dass das Rechteck 20 Schritte macht. Wert _
 entsprechend anpassen
If iBewegung >= 20 Then
    Application.CutCopyMode = False
    Exit Sub
End If
Bewegen
End Sub


Ich habe Dir dazu auch mal eine Beispieldatei erstellt, die Du Dir unter http://www.excelbeispiele.de/Beispiele_Supportnet/Beispiel... herunter laden kannst. Ich hoffe, Du kommst klar.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Suche in allen vorhandenen Beiträgen: