• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA Mouse Move

  • Onderwerp starter Onderwerp starter TJ86
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

TJ86

Gebruiker
Lid geworden
28 sep 2014
Berichten
127
Hallo allemaal,

ik heb in een excel sheet een afbeelding welke als knop dient te fungeren.

autorisatie_0.png

Nu wil ik het zo maken, dat als de muis over de afbeelding zweeft de afbeelding veranderd.

autorisatie_1.png

Nu ben ik al zo ver dat dit gaat met de MOUSEMOVE functie.. maar dan ???


Ook, als er geklikt wordt moet sheet GEGEVENS geactiveerd worden...

Wie o wie kan mij helpen?

Grtz TJ
 
Laatst bewerkt:
Dat kan ook niet werken in een .xlsx bestand omdat die per definitie geen macro bevat.

Klik in mijn voorbeeld eens in het keuzemenu op Ontwikkelaars en schakel dan Ontwikkel modus in.
Je ziet dan wat verborgen objecten tevoorschijn komen waar gebruikt van wordt gemaakt.
Klik dan eens ergens in het werkblad en dan zie je nog een verborgen label tevoorschijn komen.
Deze wordt gebruikt om het niet bestaande MouseOff of MouseExit event te emuleren.
 
Nee klopt ook, het bestand waar het in komt is een .xltm (template met macros) , maar daar lukt het me niet in.. ik doe iets fout maar weet niet wat
 
Uitleg

Nieuw document:
Bekijk bijlage MouseMove.xlsb

Verklarend plaatje:
MouseMove.JPG

Bij deze de beschrijving van wat ik heb gedaan. Tevens een nieuw document toegevoegd die hetzelfde doet maar waarin ik de verschillende objecten (4 stuks) van een vriendelijke naam heb voorzien.

Om in de ontwerpmodus te komen klik je in het menu op de tab Ontwikkelaars (zie pijl 1) en daarna op de knop Ontwerpmodus. Klik dan ergens in het werkblad om tevens een verborgen label zichtbaar te krijgen.

Om te beginnen heb ik 3 ActiveX Image objecten toegevoegd. In het plaatje zijn ze genummerd 2, 3 en 4
De namen die ik deze objecten heb gegeven staan erbij. imgUser en imgBlank heb ik van je grijze plaatje voorzien.
imgRood heeft het rode plaatje gekregen. Het object imgUser is het object dat de gebruiker in het document ziet.
De andere 2 image objecten hebben in de eigenschappen het attribuut Visible op False staan.

Daarnaast zie je bij nummer 5 een label object. Deze heb ik de naam lblExit gegeven.
Deze heeft in de eigenschappen de volgende attributen:
BackStyle: Transparant
BorderStyle: None
Caption: Leeg
Visible: False
De grootte ervan loopt van linksboven A1 tot rechtsonder AA40.

De werking:
De gebruiker ziet dus alleen het plaatje imgUser. Wanneer deze de muis er overheen beweegt treedt het MouseOver event van dat object in werking:
Code:
Private Sub imgUser_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    imgUser.Picture = imgRood.Picture
    lblExit.Visible = True
End Sub
Zoals je ziet zorgt de code ervoor dat dit object dan het plaatje krijgt die in het object imgRood staat.
De gebruiker ziet dus nu het rode plaatje. Tevens wordt daar dat grote label zichtbaar gemaakt.
Dit label zie je vanwege de attributen met de eigenschappen zoals ze gezet zijn nog steeds niet, maar deze is voor Excel nu wel zichtbaar. Als je dus je muis nu beweegt treedt het MouseOver event van het label lblExit in werking:
Code:
Private Sub lblExit_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    imgUser.Picture = imgBlank.Picture
    lblExit.Visible = False
End Sub
Deze zet dus het grijze plaatje uit het object imgBlank op het object imgUser en de gebruiker ziet weer een grijs plaatje.
Tevens wordt hier het object lblExit weer onzichtbaar voor Excel gemaakt waardoor het MouseOver event van imgUser weer zal werken als de muis er overheen bewogen wordt.

Dat is dus het hele principe.
Ik neem aan dat ik het klik event van het imgUser object niet uit hoef te leggen en ik hoop dat e.e.a. op deze manier duidelijk is zodat je er zelf mee aan de slag kan gaan.
 
Laatst bewerkt:
Cool! Ik heb m door! Super! Maar is alleen even nog een vraag, hoe kan het dat de kwaliteit van de afbeelding minder is dan het origineel? Dat moet niets met resizen te maken hebben...
 
Dat is mij ook opgevallen maar een oorzaak heb ik nog niet naar gezocht en weet dus zo ook niet of er een oplossing voor is.
 
Even naar gekeken. Zet in de eigenschappen van imgUser het attribuut PictureSizeMode op 3 - frmPictureSizeModeZoom.
Daarnaast maakt het nog een klein verschil of dit object wel of geen focus heeft. Daar kan je niets aan veranderen.

Prop.JPG
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan