VBA code verbergen cmdButton werkt niet!

Status
Niet open voor verdere reacties.

eawouters

Gebruiker
Lid geworden
11 aug 2012
Berichten
20
Hoi

Ik wil bereiken voor 21 instructies op verschillende formulieren dat: als de checkbox is aangevinkt de cmdButton (bijvoorbeeld KnopInstr20) de waarde visible = False krijgt, en anders is deze zichtbaar. Omdat dezelfde code voor meerdere formulieren geldt is volgens een module een goede oplossing, maar hoe pak ik dat aan?

De onderstaande code werkt niet

Code:
Private Sub Form_Load()

If Me![Instr20].Value = -1 Then
    Me![knopInstr20].Visible = False
Else
    Me![knopInstr20].Visible = True
End If

End Sub
 
Laatst bewerkt door een moderator:
Zowiezo kan het een stuk simpeler:
Code:
    Me.[knopInstr20].Visible = Me.[Instr20].Value
schakelt de zichtbaarheid van de knop gelijk met de waarde van je selectievakje.
Om er een functie van te maken voor verschillende combinaties op verschillende formulieren zul je de naam van het formulier mee moeten geven aan de functie, en de naam van selectievakje en opdrachtknop.
Wat het allemaal moet doen, is mij voor één formulier al een raadsel; maar voor een willekeurig aantal, ontgaat mij daarbovenop ook nog eens helemaal...
 
Plaats deze in een module

Code:
Public Function chkVisible(chk As Object, cmd As Object)

    If chk = -1 Then
        cmd.Visible = False
    Else
        cmd.Visible = True
    End If

End Function

En deze in de formulieren die je wilt gebruiken met corresponderende namen van de checkbox en commando knop

Code:
Private Sub Form_Load()

Call JeModule.chkVisible(JeCheckBox, JeButton)

End Sub

Private Sub JeCheckBox_Click()

Call JeModule.chkVisible(JeCheckBox, JeButton)

End Sub

Je checkbox moet voor de Form_Load event wel een standaardwaarde van True of False hebben
 
Kan netter.
Op je formulier krijg je:
Code:
Private Sub Form_Current()
    Call KnoppenZichtbaar(Me, "Instr", 20, 25)
End Sub
En in een module zet je dan:
Code:
Function KnoppenZichtbaar(frm As Form, Veld As String, chkMin As Integer, chkMax As Integer)
Dim i As Integer

For i = chkMin To chkMax
    frm("knop" & Veld & i).Visible = frm(Veld & i)
Next i

End Function
 
Bedankt, ik heb de opgeschoonde methode gebruikt maar krijg de volgende melding: "Compileerfout Er wordt een variabele of procedure verwacht, geen module."
De benodigde velden met de vinkjes staan vanuit de tabel Btbl_instructiebeheer via een interne query/sql code in het formulier opgenomen (huidige dataset)
 
Dat snap ik niet. Staan de selectievakjes nu wel of niet op het formulier?
 
De selectievakken staan niet op het actuele form, in een beheerscherm (buiten de actuele form) wordt per artikel bepaald welke instructies erbij horen. Deze selecteer ik handmatig (liever automatisch op basis van selectie in het beheerscherm) in de dataset van de actuele form.
 
Begrijp ik het goed, en heb je de selectievakjes niet op hetzelfde formulier staan als de knoppen die je zichtbaar wilt maken? En waar staan die dan?
 
De situatie is als volgt. Het bdrijf heeft een productieproces waarbij afhankelijk van het te maken product bepaalde instructies nodig zijn. Op zich is de huidige behoefte aan instructies bekend en voor deze instructies zijn cmdButtons aangemaakt voor het openen van de instructie. Omdat niet voor ieder product de instructie hoeft te worden geopend dient deze alleen te worden getoond, of wellicht nog beter actief te zijn, als het vinkje aan staat.

Waar wordt de vink dan aangezet? Er is één centrale tabel (instructiebeheer) met een één op één relatie tussen de instructie en de producten. Daar wordt een vinkje aangezet voor alle instructies die van belang zijn voor het productieproces. Er ontstaat dus een situatie waarbij je een match krijgt tussen de benodigde instructies (actieve cmdButton) en de recordset van de bijbehorende instructies uit de tabel Instructiebeheer welke is toegevoegd aan de recordset. Als alle waarden uit de recordset op 'Ja' staan (of true of iets dergelijks) zijn ook alle buttons actief en bruikbaar.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan