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

Weergeven van meerdere opties door vba

Status
Niet open voor verdere reacties.

Dennisplusminus

Gebruiker
Lid geworden
14 feb 2014
Berichten
15
Beste,

Ik ben bezig met een programmaatje voor mijn werk, maar ik loop nu al een tijdje vast en het lukt me niet om hieruit te komen
Omdat het een nogal complex en groot programma is heb ik het stuk waar ik op vast loop zo compact mogelijk gemaakt.

Na een aantal stappen in mijn programma genomen te hebben worden verschillende opties vergeleken met eerder ingevoerde waardes. Om het makkelijker te maken heb ik het aantal opties naar 5 terug gebracht, het aantal waardes waarmee vergeleken wordt is teruggebracht naar 3 (wanneer het voldoet krijgt de optie een 1, voldoet het niet dan 0), de vergelijking gebeurd in een ander deel van het programma. Waar ik nu op vast loop is wanneer er meerdere opties voldoen aan de gestelde waardes hoe ik die dan in beeld krijg (de waardes kunnen veranderen waardoor ook de opties die voldoen kunnen veranderen, daarom wil ik een commandbutton gebruiken om door erop te klikken te bepalen welke opties op dat moment voldoen). Ik ben er achter gekomen hoe dit werkt met om een optie in beeld te krijgen, maar het lukt me niet om dit met meerdere te doen. In het voorbeeld bestand heb ik de opties die moeten voldoen weggezet zoals ik het zou willen.

Wie kan mij helpen om deze koppeling te maken.
 

Bijlagen

Dank voor het voorbeeld, maar het geeft niet aan wat je nu verwacht te zien als je op de button drukt. Gewoon een pop-up met "1,2,5 voldoen" ?

Om zoiets te bereiken in dit voorbeeld is niet zo moeilijk, maar je geeft zelf al aan dat je echte file anders is ingedeeld. Nu lopen we dus het risico dat we iets maken dat werkt op deze file, maar heel anders is op je echte file.

Als laatste: hoe kunnen we bepalen in de "uiteindelijke" file hoeveel opties er zijn? Alweer is het in het voorbeeld makkelijk te zien, maar hoe gaat dat straks in het echt? of zijn er altijd maximaal 5 opties?

Geef nog even een toelichting op bovenstaande en dan kunnen we veel beter helpen.
 
Beste wampier,

Dank voor de reactie.
In het voorbeeld kun je zien dat naast de knop "opties die voldoen" staat, daarachter komen dan de opties die voldoen te staan, dus bijvoorbeeld "optie 1", "optie 2" en "optie 5". Deze opties zou ik dan wel elk in een apart vakje willen hebben.

In de uiteindelijke file zullen er meer dan 5 opties zijn, hoeveel precies weet ik nog niet. Maar ik verwacht dat wanneer ik weet hoe het op deze manier werkt, dat ik het ook kan toepassen op het uiteindelijke bestand.

Ik verwacht dus wanneer ik op deze makkelijke manier weet hoe het werkt, dat ik het straks op de moeilijke manier ook voor elkaar krijg.

Ik hoop u hiermee voldoende te hebben ingelicht.
 
Als je deze code onder de knopt plaatst werkt die voor het voorbeeldbestand

Code:
Private Sub CommandButton1_Click()
    Dim opslag As Range
    [l9:ic9].ClearContents
    Set opslag = [l9]
    For i = 2 To [ic1].End(xlToLeft).Column Step 4
        Valid = 1
        For j = 1 To 3
            Valid = Valid * Cells(j, i).Value
        Next j
        If Valid > 0 Then
            opslag.Value = Cells(1, i - 1).Value
            Set opslag = opslag.Offset(0, 1)
        End If
    Next i
End Sub

Het aantal opties kan variabel zijn, maar de keuze's per optie is nu vast op 3 items
 
Hartelijk dank wampier.
Het is me nu eindelijk gelukt.
Ook in het programma werkt het goed.
Nogmaals dank
 
Beste wampier,

Nu heb ik nog een vervolg vraag hierop.
Als de commandbutton op een ander tabblad staat, hoe kan ik dan daarnaartoe verwijzen
 
Dennis,

is het geen optie om de commandbutton dan daar neer te zetten waar je hem nodig hebt?
 
Beste Haije,

Dat is inderdaad een optie voor het geval dit niet mogelijk is.
Maar het zou mijn programma een stuk overzichtelijker maken als het zo kon
 
Dennis,

in dat geval zul de de macro moeten laten beginnen met een verwijzing naar het juiste blad, bv:
Code:
sheets("bladnaam").select
 
Beste Haije,

Deze code heb ik ook geprobeerd, maar dan krijg ik het probleem dat wanneer ik op de knop klik dat hij dan verspringt naar het desbetreffende tabblad en niet de rest van de code uitvoert. Hoe kan ik dit oplossen?
 
Wat wil je precies op het andere werkblad? Of beter, wat is en blijft er op het blad met de knop en wat gaat ergens anders naartoe? Staat alleen de knop op een sheet en al het andere op het andere?

Geef ook even aan waar de code nu staat. In een aparte VBA module of op het betreffende werkblad? Als de code in een aparte module staat werkt die namelijk wel onafhankelijk.
 
Waarom zou je niet gewoon een fomule gebruiken ?

in cel B4: =IF(SUM(B$1:B$3)=3;"voldoet";"")
 
Beste wampier,

Ik wil uiteindelijk het volgende krijgen.
Op bijvoorbeeld tabblad 1 staat de knop, in tabblad 2 staan alle gegevens en op tabblad 3 komt te staan welke opties voldoen.
Tabblad 2 is dus een tabblad waar alle gegevens in staan, maar ik wil niet dat de gebruiker dit straks te zien krijgt, het is mijn bedoeling dat dit een onzichtbaar proces wordt voor de gebruiker, men klikt op de knop en springt vervolgens naar tabblad 3 waar men de opties die voldoen te zien krijgt.

Het is me al wel gelukt om de opties die voldoen op een ander tabblad te zetten dmv:

Code:
Private Sub CommandButton1_Click()
    Dim opslag As Range
    [tabblad3!l9:ic9].ClearContents
    Set opslag = [tabblad3!l9]
    For i = 2 To [ic1].End(xlToLeft).Column Step 4
        Valid = 1
        For j = 1 To 3
            Valid = Valid * Cells(j, i).Value
        Next j
        If Valid > 0 Then
            opslag.Value = Cells(1, i - 1).Value
            Set opslag = opslag.Offset(0, 1)
        End If
    Next i
End Sub
 
Wat werkt er nog niet? En staat deze code in een apart VBA module of op "blad1" ?

Als de code op "blad1" staat is [ic1] bijvoorbeeld automatisch [blad1!ic1] en Cells(j,i) is eigenlijk Sheets("blad1").Cells(j,i)

Je kunt deze verfijnen op dezelfde manier als je nu hebt gedaan voor blad 3
 
Code:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
     Sheets("Blad2").Select
..
hier jouw code plaatsen
..
     Sheets("Blad3").Select
Application.ScreenUpdating = True
End Sub
 
@haije "Select" werkt alleen als de code in een onafhankelijke module staat, en is daarom contextafhankelijk (daarom is het overigens ook beter om select en activate te vermijden en doelen hard vast te stellen)

in een sheet embedded code voor blad 1:
Code:
[A1].value 'refereert naar [blad1.A1]
blad2.select
[A1].value ' refereert nog steeds naar [blad1.A1]

in een aparte module:
Code:
[A1].value 'refereert naar [activesheet.A1] dat kan blad1,blad2,bladxxxx zijn
blad2.select
[A1].value ' refereert nog steeds naar [activesheet.A1] -> dat is nu blad2
 
Beste wampier,

Zou je kunnen voordoen wat precies de code is, als de code op blad 1 staat, want mij lukt dit nog niet helemaal.
Wat mij nog niet lukt is om vanuit de commandbutton op blad1 te verwijzen naar blad 2 waar hij de waardes moet worden vergeleken en de opties die voldoen vervolgens in blad 3 weg zet.

Ik heb voor het gemak een bijlage toegevoegd.
Op blad 1 staat dus alleen de commandbutton, op blad 2 de gegevens en op blad 3 komen dus de opties die voldoen te staan
 

Bijlagen

Laatst bewerkt:
Als je de button in sheet1 wil houden:

Code:
Private Sub CommandButton1_Click()

    Dim opslag As Range
    [blad3!l9:s9].ClearContents
    Set opslag = [blad3!l9]
    For i = 2 To [blad2!ci1].End(xlToLeft).Column Step 4
        Valid = 1
        For j = 1 To 3
            Valid = Valid * Sheets("blad2").Cells(j, i).Value
        Next j
        If Valid > 0 Then
            opslag.Value = Sheets("blad2").Cells(1, i - 1).Value
            Set opslag = opslag.Offset(0, 1)
        End If
    Next i

End Sub

Alternatief (eventueel voor de volgende keer):

In de menubalk -> invoegen - > module

Dan kun je een "neutrale" module invoegen die wat makkelijker te manipuleren is.
 
Beste wampier,

Ontzettend bedankt, dit was precies wat ik nodig had.
Ik loop alleen nu tegen een ding aan als ik het in mijn programma verwerk.
Als ik voor "for j = 1 to 3" bijvoorbeeld "for j = 5 to 7" invul dan gebeurd er niks meer, hoe kan dit?
En is het ook mogelijk om meerdere vakjes door te verwijzen naar tabblad 3 (bijvoorbeeld optie 1 komt in a1 in te staan en dan daaronder bijvoorbeeld een stukje tekst die bij optie 1 hoort en dan ook vanuit tabblad 2 komt)
 
Laatst bewerkt:
Wat bedoel je met "werkt niet meer?" De indeling is verder exact hetzelfde, maar de 1/0 staat nu op rij 5 t/m 7?

In principe moet dat gewoon werken, maar kijk wel of de indeling verder exact hetzelfde is. Als de data ook naar links of rechts is verplaatst dan werkt het inderdaad niet meer.

Loop eventueel stap voor stap door de code en kijk of inderdaad de juiste cellen gelezen worden. Let ook op dat als de regels naar beneden verplaatst in zijn geheel dat je ook de code voor de "i" aanpast. deze kijkt namelijk naar de hoeveelheid data op regel 1. Als regel 1 nu leeg is zal de code in zijn geheel niet lopen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan