• 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.

Macro's aanroepen middels listbox

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

Frith

Gebruiker
Lid geworden
26 okt 2000
Berichten
219
Hallo allemaal!

Na enige googlen en uitzoekwerk toch maar een vraag hier plaatsen :D

Ik heb een aantal macro's in vba gemaakt die ik nu aanroep middels losse knoppen. Graag wil ik een listbox maken met daarin de keuze voor de macro's.

is dit mogelijk en hoe te realiseren?

Thanks!!
 
Bijgevoegd bestand toont een listbox met macro's. Voor de rest wijkt het niet af met het bestand van RB_online.
Door een macro te kiezen wordt deze geactiveerd.

@RB_online
Het kan overigens ook zonder de Select Case.
Code:
Private Sub ComboBox1_Change()
Run ComboBox1.Value

End Sub

Met vriendelijke groet,


Roncancio
 

Bijlagen

Graag nog de vraag op opgelost zetten.
Bvd.

Met vriendelijke groet,


Roncancio
 
Blij dat het werkt
@Roncancio

Ik wist niet dat het zo ook kon.
Heb ik ook weer wat geleerd.:d

René
 
dezelfde macro uitvoeren

Na even zoeken op dit forum kwam ik bij deze oplossing terecht welke ik ook goed kan gebruiken. Ik heb alleen een klein probleempje waar ik niet uit kom.

Als je de combobox gebruikt en een item selecteert dan wordt vervolgens een macro uitgevoerd. Als ik datzelfde item weer aanklik dan wordt de macro niet uitgevoerd. Ik moet eerst een ander item selecteren om vervolgens het eerste item aan te kunnen klikken om de macro uit te voeren. Hoe is dit op te lossen?

Groeten,

Biers
 
Als ik datzelfde item weer aanklik dan wordt de macro niet uitgevoerd.
Door het feit dat je niets anders selecteert, wijzigt de waarde van de combobox niet en wordt de "Change" niet getriggert.
Je zal dus zelf eerst iets anders in die combobox moeten steken of wissen.

In het voorbeeld van Roncancio zou je kunnen
Code:
ListBox1.ListIndex = -1
zetten in de MouseMove event van de listbox.
 
Laatst bewerkt:
Door het feit dat je niets anders selecteert, wijzigt de waarde van de combobox niet en wordt de "Change" niet getriggert.
Je zal dus zelf eerst iets anders in die combobox moeten steken of wissen.

Dat begrijp ik inderdaad, maar is zoiets op te lossen door de combobox op een of andere manier te resetten waarbij hij bijvoorbeeld terug keert naar het eerste item bovenaan de lijst zodra er een item is geselecteerd?
 
Je gebruikt de combobox en niet de listbox, right?
Wel, begrijp je ook mijn oplossing voor de listbox?
Pas hetzelfde principe toe voor de Combobox en het zal werken, het werkt hier toch bij mij :)
Terugkeren naar het eerste item zal niet ok zijn omdat dat eerste item getriggerd zal worden en dat wil je niet.
 
Ik gebruik idd de combobox en begrijp je oplossing voor de listbox alleen krijg ik het bij de combo niet voor elkaar. De macro's worden dan niet meer aangeroepen.
Terugkeren naar het eerste item mag, want daar heb ik geen macro aan gekoppeld dus zal er ook niets gebeuren. Het eerste item staat overigens ook niet in de code.

Ik heb ter verduidelijking het voorbeeld toegevoegd.Bekijk bijlage Map2.xls

Heb maar 1 macro toegevoegd, anders werd het bestand te groot. Dus als je klikt op < 75 cm3 dan verschijnt er een afbeelding. Als ik nog een keer op < 75 cm3 klik dan gebeurt er niets, maar ik wil juist dat dan weer dezelfde afbeelding wordt geplaatst.

Ik hoop dat je mij kunt helpen.
 
Dit is een mogelijke manier voor de opzet van RB_online
Door het feit dat je met een select case werkt heb je zelfs de If niet nodig in de Change event.

Code:
Private Sub ComboBox1_Change()
If ComboBox1.Value <> "Select" Then Run ComboBox1.Value
End Sub

Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ComboBox1.Value = "Select"
End Sub
 
De code in je Change event robuster maken door de items uit de lijst te nemen ipv van constante strings. Eén typfout links of rechts en bepaalde opties zullen niet werken.

Code:
Private Sub ComboBox1_Change()
    Select Case ComboBox1.Value
        Case ComboBox1.List(0)      'Niets doen daar "kozijn"
        Case ComboBox1.List(1):     Application.Run ("Aantasting_hout_k1")
        Case ComboBox1.List(2):     Application.Run ("Aantasting_hout_k2")
        Case ComboBox1.List(3):     Application.Run ("Aantasting_hout_k2b")
        Case ComboBox1.List(4):     Application.Run ("Aantasting_hout_k3")
        Case ComboBox1.List(5):     Application.Run ("Aantasting_hout_k3b")
        Case "> 30 cm lw":          Application.Run ("Aantasting_hout_k4")
        Case "> 30 cm st":          Application.Run ("Aantasting_hout_k4b")
        Case "gehele element lw":   Application.Run ("Aantasting_hout_k5")
        Case "gehele element st":   Application.Run ("Aantasting_hout_k5b")
        Case Else
    End Select
End Sub
Ik heb ook alles een beetje uitgelijnd zodanig dat het véél leesbaarder wordt :D
 
De code in je Change event robuster maken door de items uit de lijst te nemen ipv van constante strings. Eén typfout links of rechts en bepaalde opties zullen niet werken.

Code:
Private Sub ComboBox1_Change()
    Select Case ComboBox1.Value
        Case ComboBox1.List(0)      'Niets doen daar "kozijn"
        Case ComboBox1.List(1):     Application.Run ("Aantasting_hout_k1")
        Case ComboBox1.List(2):     Application.Run ("Aantasting_hout_k2")
        Case ComboBox1.List(3):     Application.Run ("Aantasting_hout_k2b")
        Case ComboBox1.List(4):     Application.Run ("Aantasting_hout_k3")
        Case ComboBox1.List(5):     Application.Run ("Aantasting_hout_k3b")
        Case "> 30 cm lw":          Application.Run ("Aantasting_hout_k4")
        Case "> 30 cm st":          Application.Run ("Aantasting_hout_k4b")
        Case "gehele element lw":   Application.Run ("Aantasting_hout_k5")
        Case "gehele element st":   Application.Run ("Aantasting_hout_k5b")
        Case Else
    End Select
End Sub
Ik heb ook alles een beetje uitgelijnd zodanig dat het véél leesbaarder wordt :D

Als ik deze code nu uitvoer en ik klik vervolgens op < 75 cm3 dan verschijnt er een plaatje. Selecteer ik vervolgens nog een keer < 75 cm3 dan gebeurt er niets, omdat de keuze niet is veranderd. Zet ik hem eerst op kozijn en daarna weer op < 75 cm3 dan komt er nog een plaatje, maar dat is nu juist niet de bedoeling. Als ik bijvoorbeeld 4x achter elkaar op < 75 cm3 klik dan moeten er ook 4 plaatjes verschijnen zonder een tussenhandeling.

Wat doe ik verkeerd?
 
Als ik deze code nu uitvoer en ik klik vervolgens op < 75 cm3 dan verschijnt er een plaatje. Selecteer ik vervolgens nog een keer < 75 cm3 dan gebeurt er niets, omdat de keuze niet is veranderd. Zet ik hem eerst op kozijn en daarna weer op < 75 cm3 dan komt er nog een plaatje, maar dat is nu juist niet de bedoeling. Als ik bijvoorbeeld 4x achter elkaar op < 75 cm3 klik dan moeten er ook 4 plaatjes verschijnen zonder een tussenhandeling.

Wat doe ik verkeerd?

Ik zie al wat ik verkeerd doe. Ik moest die vorige code er nog voor zetten.
Het werkt nu fantastisch. Geweldig. Bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan