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

Probleempje met Interior.Color (VBA)

Status
Niet open voor verdere reacties.

JeroenAlmere

Gebruiker
Lid geworden
29 dec 2006
Berichten
11
Ik heb een excelsheet gemaakt, maar omdat de voorwaardelijke opmaak binnen excel slechts drie waardes toelaat, en ik heb er vier nodig, moet ik binnen VBA nog een waarde opgeven om een cel te kleuren wanneer 'b' wordt ingevoerd binnen de range D12:T63.

Ik probeer dit als volgt (volledige code in mijn sheet):

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D12:T63")) Is Nothing Then

  With Target
  
    Select Case .Value
      Case Is = "b"
        .Interior.Color = vbOrange
      Case Else
        .Interior.Color = vbWhite
        .Font.Color = vbBlack
    End Select
    
  End With

  If Intersect(Target, Range("D12:T63")) = "vrij" Then Target = "v"
    If Intersect(Target, Range("D12:T63")) = "8" Then Target = "v"
      If Not Intersect(Target, Range("D12:T63")) = "v" Then
        If Not Intersect(Target, Range("D12:T63")) = "z" Then
          If Not Intersect(Target, Range("D12:T63")) = "b" Then
            Minuut = "00"
            Uur = Target
            Uur = Uur + Int(Minuut / 60): Minuut = Minuut Mod 60
            Uur = Uur Mod 24
            If Target > 1 Then Target = TimeValue(Uur & ":" & Minuut)
          End If
        End If
      End If
End If

Helaas krijg ik iedere keer een foutmelding als je nu een 'b' invoert in een cel, ik krijg het niet voor elkaar, wat denken jullie hiervan? Hoe krijg ik het voor elkaar?
 
vbOrange kan je niet gebruiken. Wel nummer 45:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D12:T63")) Is Nothing Then

  With Target
  
    Select Case .Value
      Case "b"
        .Interior.ColorIndex = 45
      Case Else
        .Interior.Color = vbWhite
        .Font.Color = vbBlack
    End Select
    
  End With

'...

Werkt het dan?

Wigi
 
Bedankt voor je reaktie, ik krijg echter helaas nog steeds een foutmelding:

Fout 1004 tijdens uitvoering:

Eigenschap colorindex van klasse Interior kon niet worden ingesteld
 
Laatst bewerkt:
De syntax klopt, heb het getest op een leeg bestand. Ik zal toch moeten vragen om het bestandje bij te hangen.
 
Zet je beveiliging eens uit :), hierna doet hij het wel.
Denk dat je eerst je beveiliging mbv vba uit moet zetten, kleur geven en dan weer aan moet zetten. Of zet bij als je je blad beveiligd dat ook de celeigenschappen mogen worden gewijzigd (maar dit is eigenlijk geen optie).

Tevens heb je nog een extra if else nodig anders kom je niet door je tijd berekening heen.
uur = b pakt hij niet.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D12:T63")) Is Nothing Then
  
  With Target
  
    Select Case .Value
      Case "b"
            .Interior.ColorIndex = 45
      Case Else
        .Interior.Color = vbWhite
        .Font.Color = vbBlack
    End Select
    
  End With

    If Target <> "b" Then
      If Intersect(Target, Range("D12:T63")) = "vrij" Then Target = "v"
        If Intersect(Target, Range("D12:T63")) = "8" Then Target = "v"
          If Not Intersect(Target, Range("D12:T63")) = "v" Then
            If Not Intersect(Target, Range("D12:T63")) = "z" Then
              If Not Intersect(Target, Range("D12:T63")) = "b" Then
                Minuut = "00"
                Uur = Target
                Uur = Uur + Int(Minuut / 60): Minuut = Minuut Mod 60
                Uur = Uur Mod 24
                If Target > 1 Then Target = TimeValue(Uur & ":" & Minuut)
              End If
            End If
          End If
    End If
End If

End Sub


Groet,
Ferenc
 
Heb je enig idee hoe ik de beveiliging via VBA tijdelijk kan uitzetten om de cel te kleuren?
Hij doet het inderdaad wel als ik de beveiliging van het blad uitschakel.
Toch is het van wezelijk belang dat mensen alleen de juiste velden kunnen gebruiken, dit omdat ze anders in allerhande cellen gaan rotzooien waardoor allerhande formules verloren gaan...
 
Code:
ActiveSheet.Unprotect "jouwwachtwoord"
'de code voor het kleuren
ActiveSheet.Protect "jouwwachtwoord"

Wigi
 
Thanks Wigi,

Die zocht ik ook, ben iedere keer een het klooien met
password:"wachtwoord"
Maar hiet mee set je hem alleen en haal je niks weg.

Bedankt.

Groet,
Ferenc
 
Dit kan ook, is ietsje langer.

Code:
ActiveSheet.Unprotect Password:= "jouwwachtwoord"
'de code voor het kleuren
ActiveSheet.Protect Password:= "jouwwachtwoord"

Wigi
 
Is er in dit geval ook een mogelijkheid om toegang tot de Visual Basic Editor uit te schakelen (en door middel van een wachtwoord in te schakelen).
Anders kan iedereen zo in de Editor lezen wat het wachtwoord is, en dat is niet de bedoeling van een wachtwoord natuurlijk :D
 
Er is ook een wachtwoord in te stellen voor de VBA code, maar onthoud dat wachtwoorden in Excel verre van veilig zijn. Ze gaan wel de occasionele Excel gebruiker tegen houden.
 
Bedankt iedereen voor de antwoorden!
Is er een betere manier om je excel-project te beveiligen ipv de standaardmanier om wachtwoorden in te geven?
 
Geen enkel paswoord is veilig in Excel, maar als je een redelijk lang paswoord neemt met zowel cijfers als letters, dan gaat men er toch een vette kluif aan hebben.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan