Button niet weergeven (Access)

Status
Niet open voor verdere reacties.

wessol

Gebruiker
Lid geworden
10 dec 2008
Berichten
22
Hoi,
In Access heb ik nu een menu. Via dit menu kun je een record toevoegen, wijzigen of bekijken. Deze 3 keuze's verwijzen allemaal naar 1 formulier. Nu heb ik in het VBA script gezet, dat bij het klikken op bekijken, het formulier wordt geopend, maar dat het niet bewerkbaar is (acFormReadOnly)...

Nu wil ik graag de knop "opslaan" weergeven bij de keuze's toevoegen en wijzigen, maar juist niet bij bekijken...

Weet iemand hoe ik dat kan doen?
mvg
 
Meerdere wegen leiden naar Rome. Zelf zou ik gaan werken met een public boolean.
Een public variabele (een boolean is een variabele) plaats je niet in een functie of Sub maar juist daarboven.
Code:
Public blnZichtbaar as boolean

In de code van de knop bekijken zet je neer:
Code:
blnZichtbaar = false

In de code van de overige knoppen zet je neer:
Code:
blnZichtbaar = True

Bij het formulier zet bij de eigenschap "Bij laden" en bij "Bij activeren":
Code:
If  blnZichtbaar = false then  'Knop opslaan niet zichtbaar
    opslaan.visible = false    'opslaan is de naam van de knop opslaan
Else 'Knop opslaan mag zichtbaar zijn
    opslaan.visible = True    'opslaan is de naam van de knop opslaan
End if   'Einde knop opslaan niet zichtbaar
 
Laatst bewerkt:
Of je geeft een OpenArgs mee bij het openen van het formulier. Deze lees je op het formulier weer uit, en afhankelijk daarvan zet je de knop op zichtbaar of juist niet.
 
Bedankt voor je antwoord Floor. Ik heb het geprobeerd, maar je bericht is mij nog te onduidelijk...

Ik heb het volgende gedaan:

1. Public blnZichtbaar as boolean heb ik bovenaan in het menu en invoerformulier gezet.
2. In de bekijk knop heb ik in de privatesub gezet: blnZichtbaar = false
3. In de wijzig en toevoeg knop heb ik in de privatesub:blnZichtbaar = true gezet.
4. bij het invoerformulier heb ik in de privatesub bij activeren en laden If blnZichtbaar = false then 'Knop opslaan niet zichtbaar
opslaan.visible = false 'opslaan is de naam van de knop opslaan
Else 'Knop opslaan mag zichtbaar zijn
opslaan.visible = True 'opslaan is de naam van de knop opslaan
End if 'Einde knop opslaan niet zichtbaar
gezet...

en hij doet het nog steeds niet
 
Geef de volledige code eens waarmee je de formulieren opent?
 
Public blnZichtbaar as boolean heb ik bovenaan in het menu en invoerformulier gezet.

De blnZichtbaar hoef je maar 1 keer te declareren. Hiervoor kan je een module aanmaken waar in je de variabele in plaatst. Een public variabele overstijgt de formulieren. Je kan hiermee waarde doorgeven van formulier 1 naar formulier 2 enz.
 
still not working...

nog even ter verduidelijking...

ik heb 2 formulieren, "Invoeren" en "Menu".

Via het menu kun je doormiddel van 3 knoppen, Toevoegen, Bekijken of Wijzigen gevens bekijken/wijzigen. Hierdoor wordt het formulier "Invoeren" geopend en daarin worden de gegevens gelezen uit de tabel (het formulier "Invoeren" is natuurlijk leeg bij het klikken op de knop toevoegen).

Nou heb ik er al voor gezorgd dat het formulier "Invoeren" als alleen lezen wordt geopend. Nu is mijn volgende stap om twee knoppen weer te geven op het formulier. "Opslaan" en "Afdrukken". Het is natuurlijk een beetje onlogisch om de knop "Opslaan" weer te geven bij het "Bekijken" van het formulier en om de knop "Afdrukken" weer te geven bij het "Toevoegen" van het formulier. Deze knoppen hebben immers geen werking...

Ik hoop dat jullie het nu wat meer snappen ;)
 
Ik denk dat wij het wel snappen, nu jij nog...
Een voorbeeldje! Ik heb hier twee knoppen, die allebei het formulier fGebeurtenis openen. Knop6 maakt hierop de knop cmdCopy zichtbaar, Knop7 maakt de knop cmdCopy onzichtbaar.

Code:
Dim stDocName As String
Dim stLinkCriteria As Boolean
Private Sub Knop6_Click()
    stDocName = "fGebeurtenis"
    stLinkCriteria = True
    DoCmd.OpenForm stDocName, , , , , , stLinkCriteria
End Sub
En de code voor Knop7:
Code:
Private Sub Knop7_Click()
    stLinkCriteria = False
    stDocName = "fGebeurtenis"
    DoCmd.OpenForm stDocName, , , , , , stLinkCriteria
End Sub

Op het formulier fGebeurtenis zet je de volgende code bij de gebeurtenis <Bij Laden>

Code:
Private Sub Form_Load()
    If Not Nz(Me.OpenArgs, "") = "" Then
        If Me.OpenArgs = True Then
            Me.cmdCopy.Visible = True
        ElseIf Me.OpenArgs = False Then
            Me.cmdCopy.Visible = False
        End If
    End IfEnd Sub

En dit werkt prima.
 
is een stuk duidelijker,

al:thumb:leen het probleem, ik heb stlinkcriteria al gebruikt als string.. kan ik dat nog een keer gebruiken?
 
Hangt er van af; op het moment dat je er een nieuwe waarde aan toekent, is de oude uiteraard weg. Maar ik gebruik zelf regelmatig een variabele voor verschillende waarden; scheelt een paar extra declaraties. Je moet er uiteraard dus wel zeker van zijn dat je de oude variabele waarde niet meer nodig hebt. Of verderop in de procedure weer opnieuw invoeren uiteraard!
 
Dan kun je voor de veiligheid rustig een extra criterium vastliggen, bijvoorbeeld:
Dim bFilter As Boolean.
Ik ga er ook eigenlijk wel vanuit dat je stLinkCriteria als een tekstfilter gebruikt, en niet als Boolean. Dus in dat geval heb je zowiezo een aparte variabele nodig.
 
:thumb:thanks man, doormiddel van de bFilter is het gelukt!
Floor ook nog bedankt!.

en hoe kan dan de knop afdrukken worden getoond/ verbergt? want die moet nou weer niet worden getoond bij het klikken op "toevoegen" terwijl opslaan wel daar moet worden getoond...
 
Laatst bewerkt:
Mag je de vraag ook nog op Opgelost zetten met de knop rechtsonder. Tenzij er nog meer vragen zijn over dit topic uiteraard...
 
yes i had still one question:

en hoe kan dan de knop afdrukken worden getoond/ verbergt? want die moet nou weer niet worden getoond bij het klikken op "toevoegen" terwijl opslaan wel daar moet worden getoond...
 
In weze dezelfde techniek, alleen zul je nu twee variabelen mee moeten geven aan het formulier. Tenzij je beide knoppen tegelijk aan of uit wilt zetten. Je filter wordt nu een tekststring, dus je definieert 'm als volgt:
Code:
Dim sFilter as String
Op de knop zet je nu:
Code:
    sFilter = "True|False"

En bij het te openen formulier:

Code:
Private Sub Form_Load()
Dim tmp() As String
Dim i As Integer
    If Not Nz(Me.OpenArgs, "") = "" Then
        If InStr(1, Me.OpenArgs, "|") > 0 Then
            tmp = Split(Me.OpenArgs, "|")
            If tmp(0) = "True" Then Me.cmdCopy.Visible = True Else Me.cmdCopy.Visible = False
            If tmp(1) = "True" Then Me.cmdPrinten.Visible = True Else Me.cmdPrinten.Visible = False
        End If
    End If
End Sub

Er gebeurt het volgende: bij het openen van het formulier geef je (nog steeds) één variabele mee. Helaas is dat een beperking van Access. Kan dus niet anders. De variabele bestaat in dit geval uit twee componenten, die met een | zijn gescheiden.
Bij het openen van het formulier kun je die twee componenten weer scheiden. Dat doe je met het Split commando. Daarmee vul je een matrix variabele. In dit geval met twee componenten, maar je snapt al dat je er veel meer in kunt hangen.
Code:
            tmp = Split(Me.OpenArgs, "|")
Vervolgens wordt elke waarde uit de matrix gebruikt om een actie te doen op een knop. En wel bij Waarde=Waar knop laten zien, Waarde= Onwaar, knop verbergen.
That's it!
 
dus als ik het goed begrijp, dan kan ik die oude code weg mieteren, omdat deze code het voor beide overneemt?

voor de rest gaat het met petje te boven:p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan