kleur command button

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
419
Ik krijg via vba de kleur van een command button niet goed. Wijzig ik de voorgrondkleur en achtergrondkleur via opmaak, lukt me dit prima. Maar doe ik dit via vba verandert alleen de voorgrondkleur, wat ik ook doe. Het voorbeeld hierbij moet voorgrondkleur wit en achtergrondkleur blauw geven, maar doet dit niet. In een andere applicatie lukt me dat zonder problemen. Hier verander ik enkel de voorgrond- en de achtergrondkleur. Weet niet wat ik fout doe. :(

Code:
Private Sub cmbKleuren_Click()
    Me.cmbKleuren.BackColor = 12349952
    Me.cmbKleuren.ForeColor = 1677215
    Me.cmbKleuren.Gradient = 0
    Me.cmbKleuren.BackStyle = 1
    Me.cmbKleuren.BackShade = 100
    Me.cmbKleuren.BackThemeColorIndex = -1
    Me.cmbKleuren.ForeThemeColorIndex = -1
    Me.cmbKleuren.BackTint = 100
    Me.cmbKleuren.ForeTint = 100
    MsgBox "achtergrondkleur : " & Me.cmbKleuren.BackColor & vbCrLf & _
        "voorgrondkleur : " & Me.cmbKleuren.ForeColor & vbCrLf & _
        "gradiënt : " & Me.cmbKleuren.Gradient & vbCrLf & _
        "bacstyle : " & Me.cmbKleuren.BackStyle & vbCrLf & _
        "backshade : " & Me.cmbKleuren.BackShade & vbCrLf & _
        "backthemecolorindex : " & Me.cmbKleuren.BackThemeColorIndex & vbCrLf & _
        "forethemecolorindex : " & Me.cmbKleuren.ForeThemeColorIndex & vbCrLf & _
        "backtint : " & Me.cmbKleuren.BackTint & vbCrLf & _
        "foretint : " & Me.cmbKleuren.ForeTint
End Sub
 
Vreemd inderdaad. Ik heb een nieuw formulier gemaakt met alleen 1 knopje erop die ik cmbKleuren hebt genoemd en daarna jouw code als gebeurtenisprocedure "Bij klikken" eraan gehangen. Het werkt hier prima. Als zie je de kleurwijziging pas nadat je op Ok hebt geklikt in de message box.

Is er niet een andere gebeurtenis van invloed op die kleuren?
 
Ik doe hetzelfde in een andere applicatie, waar dit wel werkt. Ik zal dit dan anders moeten oplossen.:confused:
 
En toch doet je code het.... Overigens zie je de nieuwe kleur pas als je de muis van de knop afhaalt, want je hebt níet de Highlight kleur veranderd.
 
Mijn code werkt wel in een ander formulier, maar niet in het formulier waar ik deze knop van kleur wil laten veranderen. Andere code interfereert met deze knop, maar ik weet niet welke. :(
 
Dan zal je de boel in debug mode moeten volgen en kom je er wel achter.
 
Veel beter is natuurlijk een voorbeeldje, want wij kunnen zo niet ruiken waar het probleem zit :).
 
Hierbij de code

Code:
Private Sub InvoerenSluiten_Click()
    Dim NrMededeling As Integer 'nummer van de mededeling in de tabel mededelingen
    Dim EindeActie As Integer 'geretourneerde antwoord

    If Me.InvoerenSluiten.Caption = "Nieuwe school invoeren" Then
        'alle velden van het formulier en het subformulier .Enabled = False
        Me.Divisie_Titel.Locked = True
        Me.Divisie_Directie.Locked = True
        Me.Divisie_Directie_Voornaam.Locked = True
        Me.SubFormulierWijzigenDataDivisiesTotScholen.Form.CODI.Locked = True
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form.CODI_voornaam.Locked = True
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form.SG_Naam.Locked = True
        
        Me!SubSubFormulierWijzigenDataDivisiesTotScholen.Form.AllowAdditions = True
        Me!SubSubFormulierWijzigenDataDivisiesTotScholen.Form.AllowDeletions = True
        'hier naar laatste record gaan en enkel één school ingeven
        'ook de mogelijkheid tot annuleren toelaten
        Me.InvoerenSluiten.Caption = "Nieuwe school bewaren" 'en ook kleur aanpassen
        Me.AnnuleerKnop.Visible = True
        'Me.InvoerenSluiten.BackColor = vbBlue 'werkt niet en ik weet hiet waarom
        'Me.InvoerenSluiten.ForeColor = vbWhite 'werkt wel
        'Me.AnnuleerKnop.BackColor = vbBlue 'werkt niet en ik weet niet waarom
        'Me.AnnuleerKnop.ForeColor = vbWhite 'werkt ook niet
        Me.VorigeDivisie.Enabled = False
        Me.VolgendeDivisie.Enabled = False
        Me.FormulierWijzigingenSluiten.Enabled = False
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form!VorigeCoördinerendeDirecteur.Enabled = False
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form!VolgendeCoördinerendeDirecteur.Enabled = False
        Me.SubSubFormulierWijzigenDataDivisiesTotScholen.SetFocus
        DoCmd.GoToRecord , , acNewRec
        Exit Sub
    End If
    If Me.InvoerenSluiten.Caption = "Nieuwe school bewaren" Then
        Me.Divisie_Titel.Locked = False
        Me.Divisie_Directie.Locked = False
        Me.Divisie_Directie_Voornaam.Locked = False
        Me.SubFormulierWijzigenDataDivisiesTotScholen.Form.CODI.Locked = False
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form.CODI_voornaam.Locked = False
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form.SG_Naam.Locked = False
        
        Me!SubSubFormulierWijzigenDataDivisiesTotScholen.Form.AllowAdditions = False
        Me!SubSubFormulierWijzigenDataDivisiesTotScholen.Form.AllowDeletions = False
        Me.InvoerenSluiten.Caption = "Nieuwe school invoeren"
        'Me.InvoerenSluiten.BackColor = 15123357 'moet hier niets hersteld worden aangezien vorige hierboven niet werkt
        'Me.InvoerenSluiten.ForeColor = 4210752 'moet hier niets hersteld worden aangezien vorige hierboven niet werkt
        Me.AnnuleerKnop.Visible = False
        Me.VorigeDivisie.Enabled = True
        Me.VolgendeDivisie.Enabled = True
        Me.FormulierWijzigingenSluiten.Enabled = True
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form!VorigeCoördinerendeDirecteur.Enabled = True
        Me!SubFormulierWijzigenDataDivisiesTotScholen.Form!VolgendeCoördinerendeDirecteur.Enabled = True
        'hier de mededeling meegeven dat begin elk schooljaar nieuwe data scholen geupdated wordt
        'en dat dan de ingevoerde school in de tabel aanwezig zou moeten zijn
        'VERPLICHT => Deze twee Dim's bij een mededeling verplicht
        NrMededeling = 8 'nummer mededeling opgehaald uit bestand
        EindeActie = info(NrMededeling)

'        MsgBox "Begin nieuwe schooljaar wordt er een nieuw scholenbestand" & vbNewLine & _
'        "geüploaded. De door jouw ingevoerde school zal dan in het" & vbNewLine & "nieuwe bestand opgenomen zijn", vbInformation, "Mededeling"
        Exit Sub
    End If
End Sub
 
Het probleem zal 'm vast niet in je code zitten (die wel een stuk netter kan, maar dat is een ander verhaal) want je geeft zelf aan dat de functie in een ander formulier wél werkt. Het is dus correcte code! Met voorbeeldje bedoel ik uiteraard een db :).
 
Sorry voor, misschien, mijn gekke vraag, maar met db bedoel je de Accessdatabank (.accdb)? Deze is wel 25 Mb groot!
 
Is dat ná comprimeren? Of ná comprimeren en zippen?
We hebben sowieso niet de hele db nodig, maar de tabellen met een paar dummyrecords is al genoeg. Zolang alle elementen die betrekking hebben op de vraag er maar in zitten. Dus in ieder geval het formulier :)
 
Hierbij betrokken db. Het volgende is de bedoeling: Indien de knop <Nieuwe school invoeren> ingedrukt wordt, verandert deze in <Nieuwe school bewaren> en een extra knop <Ongedaan maken> wordt zichtbaar. Beide knoppen zouden dan "BackColor" vbBleu en "ForeColor" vbWhite moeten hebben. En dit is niet zo.Bekijk bijlage Kleurenprobleem.zip
 
De code werkt als je als standaardkleur een normale kleur instelt, en geen accent i.c.m. een percentage. Nu heb je daar <Accent 1, Lichter 40%> staan, en blijkbaar overruled dat jou kleur. Overigens kan je code een stuk overzichtelijker:
Code:
[B]Dim frm As Form, subfrm As Form
[/B]
    If Me.InvoerenSluiten.Caption = "Nieuwe school invoeren" Then
        Set frm = Me.SubFormulierWijzigenDataDivisiesTotScholen.Form
        Set subfrm = Me.SubSubFormulierWijzigenDataDivisiesTotScholen.Form
        With frm
            .CODI.Locked = True
            .CODI_voornaam.Locked = True
            .SG_Naam.Locked = True
            .VorigeCoördinerendeDirecteur.Enabled = False
            .VolgendeCoördinerendeDirecteur.Enabled = False
        End With
        'alle velden van het formulier en het subformulier .Enabled = False
        Me.Divisie_Titel.Locked = True
        With Me
            .InvoerenSluiten.Caption = "Nieuwe school bewaren" 'en ook kleur aanpassen
            .AnnuleerKnop.Visible = True
            With .InvoerenSluiten
                .BackColor = RGB(200, 100, 255) 'werkt niet en ik weet hiet waarom
                .ForeColor = vbRed 'werkt wel
            End With
            With .AnnuleerKnop
                .BackColor = vbBlue 'werkt niet en ik weet niet waarom
                .ForeColor = vbYellow 'werkt ook niet
            End With
            .VorigeDivisie.Enabled = False
            .VolgendeDivisie.Enabled = False
            .FormulierWijzigingenSluiten.Enabled = False
            .Divisie_Directie.Locked = True
            .Divisie_Directie_Voornaam.Locked = True
            .Repaint
        End With
        Me.Repaint
        With subfrm
            .AllowAdditions = True
            .AllowDeletions = True
            'hier naar laatste record gaan en enkel één school ingeven
            'ook de mogelijkheid tot annuleren toelaten
        End With
        Me.SubSubFormulierWijzigenDataDivisiesTotScholen.SetFocus
        DoCmd.GoToRecord , , acNewRec
        Exit Sub
    End If
etc.
 
Vreemd dat die Accentkleur lastig doet. Heb de kleur aangepast en alles werkt nu. Bedankt ook voor het overzichtelijker maken van mijn code.;)
 
Hierbij db. Het probleem zit op het formulier frmNieuwAccount. Ik slaag er niet in om deze drie opties te voorzien op de knop Annuleren
1. Gebruiker vult niets in en annuleert: geeft foutmelding omdat record in hoofdformulier niet bestaat
2. Gebruiker vult enkel hoofdformulier in en annuleert: geeft foutmelding op subformulier wegens geen huidig record
3. Gebruiker vult zowel gegevens in op hoofd- als subformulier. Wegens het verplaatsen van de focus lukt dit wel.

Opstartformulier = frmBeheerLogin

In ieder geval op voorhand bedankt dat je mee wil denken. :)

Bekijk bijlage probleem delete.zip
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan