Animierte Buttons mit VBA für Excel

Softwareschmiede

Grünschnabel
Hallo zusammen.

Ich habe da ein kleines Problem, welches ich seit ein paar Tagen leider nicht alleine hinbekomme. Hoffentlich kann mir einer von euch dabei helfen!

Also, für eine Hausarbeit in der Uni (welche mir sehr wichtig ich, da ich dort schon ein paar Punkte für die Klausur bekommen kann) bei ich dabei ein Programm zur Wahrscheinlichkeitsrechnung zu machen. Dies mach ich in VBA unter Excel.

Anstelle der normalen Buttons hätte ich gerne animierte Button: damit meine ich 2 verschiedene Ansichten der Buttons. Einmal wenn es herausschaut und einmal wenn es heruntergedrückt ist. Diese beiden Ansichten habe ich schon mit Fireworks gemacht und als Gif gespeichert.

Standardmäßig habe ich die normale Ansicht als Picture des Image-Objektes eingetragen. Beim Ereignis Mouse-down möchte ich gerne die heruntergedrückte Ansicht anzeigen lassen und dann folglich beim Ereignis Mouse-Up die normale Ansicht wiederherstellen.

Doch das hat leider nicht geklappt. Ich habe es versucht die Bilder mit folgenden Befehlen anzeigen zu lasse:

- image9.picture = "c:\info_1.gif"
- image9.picture = pictureLoad ("c:\info_1.gif")

und noch mit so einigen anderen.

Leider war ich nie erfolgreich.

Dies sind meine beiden Buttonansichten:
- Info_1
- Info_2

Es wäre nett, wenn ihr mir helfen könntet.

Klasse fände ich es wenn ihr das kurz in VBA Excel machen könntet und mir dann an meine Email: remper@arcor.de senden könntet.

Vielen vielen Dank schon mal im Voraus.

Gruß
Michael
 

Anhänge

  • info_1.gif
    info_1.gif
    5,5 KB · Aufrufe: 917
  • info_2.gif
    info_2.gif
    5,3 KB · Aufrufe: 609
vieleicht hilft dir dieser code :

Code:
Dim im

Private Sub Form_Load()
im = "aus"
End Sub

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = "info_2.gif"
b = "info_1.gif"
If im <> "an" Then
Image1 = LoadPicture(a)
im = "an"
Else
Image1 = LoadPicture(b)
im = "aus"
End If
End Sub
 
Danke für die Info!

Aber leider funktioniert die sache immernoch nicht.

Anbei hab ich mal die komplette xls Datei und die Fehlermeldung des Editor (wenn ich auf das Bild klicke und der Quellcode weiter ausgeführt wird) als Bild zusammen gezippt.

Kurz zur Info: Ich möchte das animierte Button in der oben links im Form plazierten Imagebox ja nach Mausaktivität anzeigen lassen. So dass ich dann später das darunter leigende Informationsbutton durch das neue ersetzen kann.

Doch leider habe ich dabei immernoch Probleme.

Danke schon mal für eure Hilfe.
 

Anhänge

  • PSB.zip
    128,6 KB · Aufrufe: 428
ich will ja nicht meckern aber das dim muss außerhalb des forms liegen,
am besten ganz oben in der code liste
 
Zuletzt bearbeitet:
Hi hhunderter.


Da hast Du recht. Sorry, war mein Fehler. Jetzt hab ich das aber abgeändert. Und ich erhalte wieder die Fehlermeldung, wie unten abgebildet. Funktioniert das Ding denn auf Deinem Rechner wenn Du das dim oben alleine hinsetzt?

Gruß
Michael
 

Anhänge

  • fehlermeldung_2.gif
    fehlermeldung_2.gif
    47 KB · Aufrufe: 653
Hi

also bei mir funzelt folgender Code

Code:
Option Explicit

Private m_pButton2Unpressed                  As IPictureDisp
Private m_pButton2Pressed                    As IPictureDisp

Private Sub Image3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        Image3.Picture = m_pButton2Pressed
        Me.Repaint
    End If
End Sub

Private Sub Image3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        Image3.Picture = m_pButton2Unpressed
        Me.Repaint
    End If
End Sub

Private Sub UserForm_Initialize()
    Dim szPath                          As String

    szPath = Left$(Application.ActiveWorkbook.FullName, Len(Application.ActiveWorkbook.FullName) - Len(Application.ActiveWorkbook.Name))
    Set m_pButton2Unpressed = LoadPicture(szPath & "info_1.gif")
    Set m_pButton2Pressed = LoadPicture(szPath & "info_2.gif")
End Sub

maybe it helps you
Das Orakel
 
Das ganze projekt findest Du in der oben angehängten Zip-Datei. Da ist die XLS-Datei drin. Projekt ist als UserForm in der Excel Datei unter dem VBA-Editor drin.
 
So Jungs also das problem liegt mal wieder an unsauberer Programmierung bzw. einem schlechten Compiler der

so etwas zu lässt :
Code:
Image3 = LoadPicture(a)
bzw. nicht anmeckert

wenn man die eigenschaft der image box anspricht die man haben will dann klappts auch mit dem nachbarn Bsp:
Code:
Image3.Picture = LoadPicture(a)
(oder wolltet ihr nur den namen des bildes der Imagebox zuweisen )


Ich habe jetzt nicht den ganzen post gelesen um dein komplettes problem zu lösen aber mir ist aufgefallen das du die divison durch null zulässt was auch einen fehler provozieren würde

Code:
berechnung1 = adt / ads

des weiteren solltest du deine Werte explizit casten zum beispiel
Code:
adt = CInt(Val(TextBox5.Text))
statt
Code:
adt = TextBox5.Text

da man ja auch andere sachen als zahlen in eine Textbox eingeben kann und mir dein projekt direkt mit fehlermeldungen erschien

Gruß bb
 
Zuletzt bearbeitet:
Softwareschmiede hat gesagt.:
Das ganze projekt findest Du in der oben angehängten Zip-Datei. Da ist die XLS-Datei drin. Projekt ist als UserForm in der Excel Datei unter dem VBA-Editor drin.
kann ich irgend wie nur mit openofice öffnen

Orakel hat gesagt.:
Hi

also bei mir funzelt folgender Code

Code:
Option Explicit

Private m_pButton2Unpressed                  As IPictureDisp
Private m_pButton2Pressed                    As IPictureDisp

Private Sub Image3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        Image3.Picture = m_pButton2Pressed
        Me.Repaint
    End If
End Sub

Private Sub Image3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        Image3.Picture = m_pButton2Unpressed
        Me.Repaint
    End If
End Sub

Private Sub UserForm_Initialize()
    Dim szPath                          As String

    szPath = Left$(Application.ActiveWorkbook.FullName, Len(Application.ActiveWorkbook.FullName) - Len(Application.ActiveWorkbook.Name))
    Set m_pButton2Unpressed = LoadPicture(szPath & "info_1.gif")
    Set m_pButton2Pressed = LoadPicture(szPath & "info_2.gif")
End Sub

maybe it helps you
Das Orakel
der code ist net schlecht aber ohne das " Me.Repaint " funze es besser
(bei mir)
 

Neue Beiträge

Zurück