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

EXCEL VBA: Onbekende 1004 error

Status
Niet open voor verdere reacties.

tijmen_4real

Gebruiker
Lid geworden
20 apr 2005
Berichten
338
Hoi,

In een cel wordt een start -en einddatum van een project ingegeven.
Excel moet door de datums in de kolommen (soort van provosorische kalender) loopen en wanneer de datum binnen de start en eind past, het vakje op de rij van het project groen kleuren.
Principes lijken te werken, maar krijg een probleem met de aanRij en aanCel variabele.
Wanneer ik deze in de loop aan een cell koppel, zodat het vakje op rij van het project groen gekleurd moet worden, krijg ik een 1004 foutmelding.

Mij is totaal onbekend waarom.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Dim startDatum As Date
    Dim eindDatum As Date
    Dim aanRij As String
    Dim aanCel As String
    
    aanRij = Target.row
    
    startDatum = Range("G" + aanRij).Value
    eindDatum = Range("H" + aanRij).Value
 
    Dim rng As Range, cell As Range, kolom As Range
    
    Set rng = Range("L5:GD5")
    For Each cell In rng
    If (cell.Value >= startDatum) And (cell.Value <= eindDatum) Then
    aanCel = cell.Column
    Cells(aanRij, aanCel).Interior.Color = RGB(0, 255, 0)
    End If
    Next cell

    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub

Zou iemand zo vriendelijk willen zijn om mij hierbij alsjeblieft te helpen?
Bestand staat in de bijlage.
Bedankt en met groet,

Tijmen
 

Bijlagen

Dim aanCel en aanRij als Integer of Long, niet als string.
Gebruik bij het vullen van die datum variabelen geen + maar het & teken.
Gebruik ook geen correct Engelse woorden als variabele.
Dus niet cell maar cel.
 
Laatst bewerkt:
Bedankt, werkt inderdaad na de aanpassingen goed.
Volgende obstakel is, wanneer de startdatum aangepast wordt.
Ik wil dan de dagen die niet meer groen horen te zijn (en dus buiten de projectdatum vallen) weer wit laten worden.
Hoewel deze formule simpel lijkt, verandert de kleur niet:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    'Application.DisplayAlerts = False

    Dim startDatum As Date
    Dim eindDatum As Date
    Dim aanRij As Long
    aanRij = Target.row
    Dim aanC As Long
          
    startDatum = Range("G" & aanRij).Value
    eindDatum = Range("H" & aanRij).Value
 
    Dim rng As Range, cell As Range
    Set rng = Range("L5:LU5")
    For Each cell In rng
    If Weekday(cell.Value, vbMonday) <= 5 Then
        aanC = cell.Column
        If (cell.Value >= startDatum) And (cell.Value <= eindDatum) Then
        Cells(aanRij, aanC).Interior.Color = RGB(0, 255, 0)
        ElseIf (cell.Value <= startDatum) And (cell.Value >= eindDatum) Then
        Cells(aanRij, aanC).Interior.Color = RGB(255, 255, 255)
    End If
    End If
    Next cell
    
    Call checkUren
    'Application.DisplayAlerts = False
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub

Sub checkUren()
    Dim rng As Range, cell As Range
    Set rng = Range("L3:LS3")
    For Each cell In rng
        If cell.Value = "" Then
        cell.Interior.Color = RGB(217, 217, 217)
        ElseIf cell.Value = 0 Then
        cell.Interior.Color = RGB(255, 255, 255)
        ElseIf cell.Value <= -1 Then
        cell.Interior.Color = RGB(255, 0, 0)
        ElseIf cell.Value >= 1 Then
        cell.Interior.Color = RGB(0, 255, 0)
    End If
    Next cell
End Sub

Wat doe ik verkeerd? Waarom werkt dit niet?
 
Probeer het eens zo:
Code:
    For Each cell In rng
        If Weekday(cell.Value, vbMonday) <= 5 Then
            aanC = cell.Column
            If (cell.Value >= startDatum) And (cell.Value <= eindDatum) Then
                Cells(aanRij, aanC).Interior.Color = RGB(0, 255, 0)
            Else
                Cells(aanRij, aanC).Interior.Color = RGB(255, 255, 255)
            End If
        End If
    Next cell
 
Werkt niet helemaal lekker, maar meer met een andere reden: foutmelding 13 (typen komen niet overeen). Zit hem in de variabele van de datums, omdat ik blijkbaar die data vergelijk met iets wat geen datum is? (Long/Integer)
 
Plaats dan je document zoals deze nu is.
 
Weet je zeker dat je een geldige datum gebruikt?
Dus niet bijvoorbeeld 31-2-2022?
 
Het is altijd verstandig om:

- een apart werkblad te gebruiken voor gebruikersinvoer
- een apart werkblad te gebruiken voor een grafische weergave van ingevoerde gegevens
- een apart (verborgen) werkblad te gebruiken voor validatielijsten
- de ingebouwde Excel faciliteiten te gebruiken (dynamische tabel, draaitabel, voorwaardelijke opmaak)

Zie de bijlage als voorbeeld (vanuit educatief oogmerk is het werkblad met validatielijsten niet verborgen)
 

Bijlagen

Weet je zeker dat je een geldige datum gebruikt?
Dus niet bijvoorbeeld 31-2-2022?

Code:
MsgBox (startDatum)
    MsgBox (Range("G" & aanRij).Value)

Geven beiden een datum terug als inderdaad 31-2-2022
Waarom is dat geen geldige datum?
 
Omdat 31 februari niet bestaat misschien?
 
Stomme typefout van mij natuurlijk. Er worden enkel echte datums gebruikt.
Maar on-topic weet ik nog steeds niet waarom ik die foutmelding 13 krijgt...?
 
Die fout krijg je als je een niet bestaande datum gebruikt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan