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

Forumthread: Grafik verschieben vba

Grafik verschieben vba
Martin
Hallo Zusammen
Ich möchte eine Grafik sichtbar, und langsam verschieben.
Habe folgenden Code geschrieben:
Sub verschieben1()
ActiveSheet.Shapes("UFO").Top = 10
ActiveSheet.Shapes("UFO").Left = 10
For k = 1 To 120000
Next k
ActiveSheet.Shapes("UFO").Top = 30
ActiveSheet.Shapes("UFO").Left = 30
For k = 1 To 120000
Next k
ActiveSheet.Shapes("UFO").Top = 10
ActiveSheet.Shapes("UFO").Left = 50
For k = 1 To 120000
Next k
ActiveSheet.Shapes("UFO").Top = 30
ActiveSheet.Shapes("UFO").Left = 70
For k = 1 To 120000
Next k
ActiveSheet.Shapes("UFO").Top = 10
ActiveSheet.Shapes("UFO").Left = 90
For k = 1 To 120000
Next k
ActiveSheet.Shapes("UFO").Top = 30
ActiveSheet.Shapes("UFO").Left = 110
End Sub

Leider springt das "UFO" gleich an den letzten Platz. Wie kriege ich das hin, dass die Grafik einen Punkt nach dem anderen anspringt und auf dem Display sichtbar ist.
Das mit der Schlaufe war nur zum Zeit zu gewinnen. Geht aber auch nicht. Eine weitere Idee war, mit:
Application.Wait Time + TimeSerial(0, 0, 1)
Leider geht dies auch nicht wirklich. Kann man die Zeit kleiner als 1 Sec. angeben?
Danke und schöne Grüsse aus der Schweiz
Martin
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Grafik verschieben vba
05.08.2009 14:02:47
MichaV
Hallo,
Ideen haben die Leute...
Option Explicit
Sub test()
Dim i As Integer
Dim dx As Single
Dim dy As Single
With Me.Shapes("Ufo")
.Top = 30
.Left = 30
For i = 1 To 100
dx = i / 10
dy = i / 20
.Top = .Top + dx
.Left = .Left + dy
Sleep 10
DoEvents
Next i
For i = 100 To 1 Step -1
dx = i / 10
dy = i / 20
.Top = .Top - dx
.Left = .Left - dy
Sleep 10
DoEvents
Next i
End With
End Sub
Die Funktion Sleep deklarierst Du indem Du in einem MODUL diese Zeile reinschreibst:
Declare

Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Gruß- Micha

Anzeige
AW: Grafik verschieben vba
05.08.2009 14:29:10
Martin
Hallo Micha

'Declare
Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dies frisst das VBA nicht.
Zur Erklärung zur Zeit stehen alle Makros in einem Modul.
Die Variable "Sleep" wird nicht erkannt.
Hast Du noch eine Idee?
Danke
Anzeige
AW: Grafik verschieben vba
05.08.2009 14:45:47
MichaV
Klar frisst es die. Schreibs ohne Apostroph in die erste Zeile des Moduls, also ganz oben.
AW: Grafik verschieben vba
05.08.2009 15:03:42
MichaV
Junge...
in die erste Zeile
nicht in die ersten beiden Zeilen :o)
Anzeige
AW: Grafik verschieben vba
05.08.2009 15:09:13
Martin
Wie gesagt nicht fähig . . .
;-)
Danke
aber jetzt hab ich mal ne Frage
05.08.2009 15:12:53
MichaV
...kann mir jemand sagen warum die Grafik schneller wird (und auf dem Rückweg wieder langsamer). Woran liegt das bitte?
AW: aber jetzt hab ich mal ne Frage
05.08.2009 15:45:02
Wolli
Weil der Verschiebebetrag dx / dy von i abhängt! Gruß, Wolli
Anzeige
AW: aber jetzt hab ich mal ne Frage
05.08.2009 15:46:28
MichaV
oh Mann, ja klar. Ich bin auch unfähig....
;
Anzeige

Infobox / Tutorial

Grafik verschieben in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um eine Grafik in Excel mittels VBA (Visual Basic for Applications) sichtbar und langsam zu verschieben, kannst du die folgende Schritt-für-Schritt-Anleitung nutzen:

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

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (deineDatei.xlsx) und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub verschieben()
       Dim i As Integer
       With ActiveSheet.Shapes("UFO")
           For i = 1 To 100
               .Top = .Top + i / 10
               .Left = .Left + i / 20
               Sleep 10
               DoEvents
           Next i
           For i = 100 To 1 Step -1
               .Top = .Top - i / 10
               .Left = .Left - i / 20
               Sleep 10
               DoEvents
           Next i
       End With
    End Sub
  4. Grafik benennen: Stelle sicher, dass die Grafik, die du verschieben möchtest, den Namen "UFO" hat, oder ändere den Namen im Code entsprechend.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: "Sleep" wird nicht erkannt: Stelle sicher, dass die Zeile Declare Sub Sleep Lib "kernel32" ohne Apostroph in der ersten Zeile des Moduls steht.
  • Grafik springt sofort: Überprüfe, ob die Schleifenbedingung korrekt ist und die grafischen Koordinaten in kleinen Schritten verändert werden.
  • VBA läuft nicht: Stelle sicher, dass Makros in deiner Excel-Datei aktiviert sind.

Alternative Methoden

Wenn du keine VBA verwenden möchtest, kannst du auch die folgenden Methoden ausprobieren:

  1. Animation mit Excel-Formeln: Verwende Excel-Formeln und bedingte Formatierungen, um visuelle Effekte zu erzielen.
  2. PowerPoint: Wenn du Animationen benötigst, ist PowerPoint möglicherweise eine bessere Wahl, da es mehr Funktionen für Animationen bietet.

Praktische Beispiele

Um die Funktionalität zu demonstrieren, kannst du die oben genannten Codeschnipsel anpassen:

  1. Langsame Bewegung: Erhöhe den Wert in Sleep 10, um die Bewegung langsamer zu machen.
  2. Richtungswechsel: Ändere die Werte in .Top und .Left, um verschiedene Bewegungsmuster auszuprobieren.

Tipps für Profis

  • Verwende DoEvents: Dies ermöglicht Excel, auch während des Ausführens des Makros auf Benutzereingaben zu reagieren.
  • Optimierung der Geschwindigkeit: Experimentiere mit den Werten in der Schleife, um die Geschwindigkeit der Bewegung anzupassen.
  • Ereignisgesteuerte Makros: Setze Makros so auf, dass sie durch bestimmte Ereignisse (z.B. einen Button-Klick) ausgelöst werden.

FAQ: Häufige Fragen

1. Warum wird die Grafik schneller, wenn sie sich zurückbewegt?
Das liegt daran, dass der Verschiebebetrag (dx und dy) von der Schleifenvariable i abhängt, was zu unterschiedlicher Geschwindigkeit führt.

2. Kann ich die Zeit zwischen den Bewegungen anpassen?
Ja, indem du den Wert in Sleep änderst, kannst du die Pause zwischen den Bewegungen anpassen. Ein kleinerer Wert bedeutet schnellere Bewegungen.

3. Funktioniert dieser Code in Excel 2016?
Ja, dieser VBA-Code funktioniert in Excel 2016 und in späteren Versionen. Achte darauf, dass du Makros aktiviert hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige