Fout 1004 bij wegschrijven van formule naar cel

Status
Niet open voor verdere reacties.

BobbyRond

Nieuwe gebruiker
Lid geworden
23 sep 2019
Berichten
2
Hallo allemaal,

Ik heb een macro geschreven voor een school die een aantal werkbladen afloopt om te kijken wie zich moet melden de volgende dag. Om dit te doen loopt de macro eerst door de werkbladen, dan door de kolommen en dan door de rijen. Zodra melden bij een student op "Ja" staat, schrijft de macro deze student weg naar het werkblad. Dit gaat allemaal goed, maar ik wil graag ook per student een formule wegschrijven, maar dit lukt me niet.

De code waarmee ik alles wegschrijf, is:

Code:
If (Cells(i, weekkolom(l)) = "Ja") Then

Worksheets("Melden").Cells(j, 1).Value = werkblad(k)
Worksheets("Melden").Cells(j, 2).Value = Cells(i, 1).Value
Worksheets("Melden").Cells(j, 3).Value = Cells(i, 2).Value
Worksheets("Melden").Cells(j, 4).Value = Cells(i, 3).Value
Worksheets("Melden").Cells(j, 5).Value = weeknummers(l)
                    
Worksheets("Melden").Cells(j, 9).Formula = "=ALS(F" & j & "=""Ja"";""Niet nodig"";""Melden"")"

Deze laatste regel loopt het script op stuk. De melding die dan verschijnt is: "Fout 1004 tijdens uitvoering: Door de toepassing of door object gedefinieerde fout".

Zodra ik het =-teken voor "ALS" weghaal, dan schrijft de macro uiteraard gewoon tekst weg naar de cel. Als ik dan handmatig het =-teken ervoor zet, werkt de formule precies zoals ik wil.

Mijn vraag is dus: Waarom kan ik de formule niet goed wegschrijven?

Ik heb al geprobeerd om met .Value te werken of om "=IF" te gebruiken, maar tot op heden nog geen succes.

Alvast bedankt voor jullie advies / inzichten!

Groeten,

Bobby Rond
 
Wijzig .Formula eens in .FormulaLocal


Opmerking:
Is weeknummers(l) wel goed?
Moet dat niet weeknummers(i) zijn?
 
Laatst bewerkt:
Hoi edmoor,

FormulaLocal werkt! Onwijs bedankt!

De l klopt overigens wel. Voor de geïnteresseerden hier het hele script:

Code:
Sub Melden()

' Melden Macro
' Deze macro loopt alle tabbladen af en kijkt per tabblad naar alle weken of iemand zich moet melden.

' Sneltoets: Ctrl+r

    Dim i As Integer ' Welke regel je telt
    Dim j As Integer ' Welke regel er moet worden geplaatst
    Dim k As Integer ' Counter om door de klas-tabbladen te lopen
    Dim l As Integer ' Counter om door de weken per klas-tabblad te lopen
    Dim x As Integer ' Counter for Array werkblad
    Dim y As Integer ' Counter for Array weekkolom
    Dim z As Integer ' Counter for Array weeknummers
    Dim werkblad(1 To 24) As String
    Dim weekkolom(1 To 39) As Integer
    Dim weeknummers(1 To 39) As Integer
        
    i = 3
    j = 2
    k = 1
    l = 1
    
    x = 1
    y = 1
    z = 1
    
    For x = 1 To 24
        werkblad(x) = Worksheets("Variabelen").Cells(x + 1, 1).Value
    Next x
    
    For y = 1 To 39
        weekkolom(y) = Worksheets("Variabelen").Cells(y + 1, 2).Value
    Next y
    
    For z = 1 To 39
        weeknummers(z) = Worksheets("Variabelen").Cells(z + 1, 3).Value
    Next z
        
    For k = 1 To 24
        Sheets(werkblad(k)).Select
        For l = 1 To 39
            ' MsgBox "Ik bekijk weekkolom " & weekkolom(l)
            i = 1
            Do While Cells(i, 1).Value <> ""
            ' MsgBox "Ik check regel " & i
                If (Cells(i, weekkolom(l)) = "Ja") Then
                    ' MsgBox "Regel " & i & " van werkblad " & werkblad(k) & " en week " & weeknummers(l) & " staat op Ja"
                    Worksheets("Melden").Cells(j, 1).Value = werkblad(k)
                    Worksheets("Melden").Cells(j, 2).Value = Cells(i, 1).Value
                    Worksheets("Melden").Cells(j, 3).Value = Cells(i, 2).Value
                    Worksheets("Melden").Cells(j, 4).Value = Cells(i, 3).Value
                    Worksheets("Melden").Cells(j, 5).Value = weeknummers(l)
                    
                    Worksheets("Melden").Cells(j, 7).FormulaLocal = "=ALS(F" & j & "=""Ja"";""Niet nodig"";""Melden"")"
                    Worksheets("Melden").Cells(j, 7).Formula = "ALS(H" & j & "=" & Chr(34) & "Ja" & Chr(34) & ";" & Chr(34) & "Niet nodig" & Chr(34) & ";" & Chr(34) & "Uitnodigen" & Chr(34) & ")"
                    
                    j = j + 1
                End If
                i = i + 1
            Loop
        Next l
    Next k
    Sheets("Melden").Select
End Sub

Het script werkt. Mocht iemand nog een efficiëntieslag hierin aan kunnen brengen, is alle feedback welkom uiteraard! :)

Groeten,

Bobby
 
Als je .Formula wilt gebruiken moet de formule inderdaad in het Engels zijn, maar daarbij moet je dan ook de ; tekens in een komma wijzigen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan