Hoe kan ik de functie DIM instellen dat de formule blijft staan?

Status
Niet open voor verdere reacties.

gast0136

Gebruiker
Lid geworden
18 sep 2013
Berichten
11
Hoi allemaal,

Hopelijk kunnen jullie mij helpen met mijn probleem. Eerst heb ik alle gangen nagelopen of er een oplossing was voor mijn probleem, helaas zonder resultaat. Het gaat om deze formule:

Code:
Private Sub Form_Current()
    Dim ZISA As String
    [B][COLOR="#FF0000"]Dim CBOA as String[/COLOR][/B]
        ZISA = Nz(Me.chk_ZIS, 0)
        CBOA = Me.cbo_ZIS.BackColor
        If ZISA <> 0 Then
            CBOA = vbRed
        Else
            CBOA = vbWhite
        End If
End Sub

Die vetgedrukte en rode regel is een probleem. Hoe kan ik ervoor zorgen dat de formule van CBOA volledig weergegeven wordt in CBOA = vbRed? :shocked:
 
Een variabele heeft een bepaalde 'levensduur'. Die geldt afhankelijk van de plek waar je hem definieert. Zoals je de variabele CBOA nu hebt vastgelegd, werkt hij alleen binnen de gebeurtenis Form_Current. Oftwel: als je bladert door de records op het formulier. Zodra de procedure start, wordt de variabele gedefinieerd, en dan is hij dus ook leeg. Immers: je maakt hem nu pas aan. Vervolgens vul je hem op basis van de waarde ZISA. En meer doe je niet, daarna wordt de procedure afgesloten. En dan worden ook de variabelen weer netjes voor je geleegd. Kortom: de code doet eigenlijk niks nuttigs. Dit is al beter:

Code:
Option Compare Database
Dim ZISA As Long, CBOA as Long

Private Sub Form_Current()
        ZISA = Nz(Me.chk_ZIS, 0)
        CBOA = Me.cbo_ZIS.BackColor
        If ZISA <> 0 Then
            CBOA = vbRed
        Else
            CBOA = vbWhite
        End If
End Sub
Nu wordt de declaratie buiten de procedure gehouden, maar wel op het formulier. Oftewel: de variabelen worden al aangemaakt als het formulier wordt geopend. En ze blijven bestaan tot het formulier weer wordt gesloten. Nu kun je wél verwijzen naar een waarde die je opslaat. Overigens heb ik het type variabele ook veranderd, want vbRed en vbWhite zijn getallen, geen tekst. Dus mag je de Backcolor ook niet in een tekstvariabele steken.
 
Hoi OctaFish,

Bedankt voor je reaktie. Ik begrijp het nu wat beter na je uitleg. :thumb:

Ik heb net je code toegepast. Alleen ZISA doet het goed en CBOA werkt helaas niet. De achtergrondkleur van de keuzevak blijft zoals het is ondanks dat dat vinkje aan of uit staat na heen en weer scrollen. Als ik jouw code ietwat aanpas (zie hieronder), dan springt de achtergrondkleur van deze keuzevak wel van kleur. Maar het moet toch kunnen met jouw code die je mij aanbevolen had? :D

Code:
Option Compare Database
Private Sub Form_Current()
Dim ZISA As Long
        ZISA = Nz(Me.chk_ZIS, 0)
        If ZISA <> 0 Then
            Me.cbo_ZIS.BackColor = vbRed
        Else
            Me.cbo_ZIS.BackColor = vbWhite
        End If
End Sub
 
Je variabele ZISA zit nog steeds in de Current procedure, dus die gebruik je heel kort. De andere variabele zie ik nu helemaal niet meer. Dus waar is die gebleven? Een formulier heeft een bepaalde 'steady State' die wordt bepaald door bepaalde acties op het formulier. Kleuren aanpassen van objecten zie je niet altijd, soms moet je dat afdwingen. Bijvoorbeeld door de regel Me.Repaint toe te voegen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan