VBA: For Each - automatiseringsfout

Status
Niet open voor verdere reacties.

sandra1978

Gebruiker
Lid geworden
21 feb 2011
Berichten
64
Hallo,

Ik heb een document met 'brondata', waarvan telkens de gegevens van 1 lijn/rij in een sjabloon (werkdocument modulefiches) terecht moeten komen, en dit opgeslagen moet worden met als naam de 'modulenaam'.
Het lukt me om dit voor de eerste lijn te doen: het sjabloon wordt ingevuld en gesaved.
Er wordt echter niet overgeschakeld naar de volgende lijn, ik krijg een 'automatiseringsfout'-2147221080.
De fout situeert zich op deze lijn: "shsjabloon.Range("B1").Value = module.Value "

Ik zie niet waar t fout zit, maar ik ben dan ook nog maar een groentje :).
Hieronder de code:

Code:
Sub McrModulefiches()
    Dim wbsjabloon As Workbook
    Dim wbbrodata As Workbook
    Dim shbrondata As Worksheet
    Dim shsjabloon As Worksheet
    Dim module As Variant
            
    Set wbsjabloon = Workbooks("werkdocument_modulefiches.xlsx")
    Set wbbrondata = Workbooks("brondata.xlsx")
    Set shbrondata = wbbrondata.Sheets("brondata")
    Set shsjabloon = wbsjabloon.Sheets("sjabloon")
           
           wbbrondata.Activate
           For Each module In wbbrondata.Sheets("brondata").Range(Range("c4"), Range("c3").End(xlDown))
            shsjabloon.Range("B1").Value = module.Value           'modulenaam       
            shsjabloon.Range("B3").Value = module.Offset(0, 3).Value 'lestijden
            shsjabloon.Range("b16").Value = module.Offset(0, 4).Value 'kostprijs
            shsjabloon.Range("b17").Value = module.Offset(0, 6).Value 'materiaalkost
            shsjabloon.Range("b18").Value = module.Offset(0, 7).Value 'boek/cursus
            shsjabloon.Range("b5").Value = module.Offset(0, 8).Value  'contact/zelfstudie
            shsjabloon.Range("b4").Value = module.Offset(0, 9).Value  'afstandsonderwijs
            shsjabloon.Range("b6").Value = module.Offset(0, 10).Value 'toelatingsvoorwaarden
            shsjabloon.Range("b7").Value = module.Offset(0, 11).Value 'vereiste voorkennis
            shsjabloon.Range("b8").Value = module.Offset(0, 12).Value 'EV
            shsjabloon.Range("a12").Value = module.Offset(0, 13).Value 'inhoud module
            shsjabloon.Range("a24").Value = module.Offset(0, 14).Value 'pbm
            shsjabloon.Range("a27").Value = module.Offset(0, 15).Value 'materialen
            wbsjabloon.Activate
            Range("A12:G12").Merge 
            ChDir "O:\03_Harde_grafische_technieken_ambachten\14_Communicatie\Website\Modulefiches"
            ActiveWorkbook.SaveAs module.Value            '                  'document opslaan als
            wbsjabloon.Close False
            Workbooks.Open ("O:\03_Harde_grafische_technieken_ambachten\14_Communicatie\Website\modulefiches\werkdocument_modulefiches.xlsx")
            wbbrondata.Activate
            Next

Alvast bedankt
 
Wijzig de variabele module eens in md.
Het zou kunnen dat module een gereserveerd woord is en hij daar over struikelt.
Gebruik nooit correct Engelse woorden als naam voor een variabele.
 
Bedankt voor de snelle reactie. Ik heb het aangepast, maar ik krijg nog dezelfde fout :-(. Dus daar zit het hem niet blijkbaar.
 
Loop er dan eens in debug mode doorheen met F8 en bekijk de waarden van je variabelen op de regel waar het nu fout gaat.
 
Daar staat dat de value gelijk is aan 'automatiseringsfout', dus daar ben ik niet zoveel mee :-(
 
De value waarvan?
Je hebt alle woorden module gewijzigd in md?
 
- gebruik nooit samengevoegde cellen
- gebruik in VBA de eigenschappen Usedrange of CurrentRegion
- maak in VBA gebruik van Arrays
- in VBA is ChDir overbodig
- vragen om moeilijkheden: Range(Range("c4"), Range("c3").End(xlDown))

Bijv. zo:

Code:
Sub M_snb()
  sp = Workbooks("werkdocument_modulefiches.xlsx").Sheets("sjabloon").Range("A1:B27")
  sn = Workbooks("brondata.xlsx").Sheets("brondata").UsedRange

  For j = 3 To UBound(sn)
    sp(1, 2) = sn(j, 3)
    sp(3, 2) = sn(j, 7)
    sp(16, 2) = sn(j, 8)
    sp(17, 2) = sn(j, 10)
    sp(18, 2) = sn(j, 11)
    sp(5, 2) = sn(j, 12)
    sp(4, 2) = sn(j, 13)
    sp(6, 2) = sn(j, 14)
    sp(7, 2) = sn(j, 15)
    sp(8, 2) = sn(j, 16)
    sp(12, 1) = sn(j, 17)
    sp(24, 1) = sn(j, 18)
    sp(27, 1) = sn(j, 19)
    With Workbooks("werkdocument_modulefiches.xlsx")
      .Sheets("sjabloon").Range("A1:B27") = sp
      .SaveCopyAs "O:\03_Harde_grafische_technieken_ambachten\14_Communicatie\Website\Modulefiches\" & sn(j, 3) & ".xlsm"
    End With
  Next
End Sub
 
Laatst bewerkt:
Bedankt, ik zal het zo dadelijk eens proberen.

Waarom raad je af om dit: Range(Range("c4"), Range("c3").End(xlDown)) te gebruiken? Ik heb dat zo aangeleerd tijdens eens cursus. Om zo een bereik aan te duiden waarvan de lengte kan variëren. Anders moet ik het al definiëren, terwijl er nog rijen kunnen bijkomen.
 
Laatst bewerkt door een moderator:
Doordat de coderegel niet juist is als je de code uitvoert in een ander werkblad.

Fout:
Code:
 For Each module In wbbrondata.Sheets("brondata").Range(Range("c4"), Range("c3").End(xlDown))

Goed:
Code:
 For Each module In[COLOR=#ff0000] wbbrondata.Sheets("brondata")[/COLOR].Range("c4", [COLOR=#ff0000]wbbrondata.Sheets("brondata")[/COLOR].Range("[COLOR=#ff0000]c4[/COLOR]").End(xlDown))

Maar dan nog liever:
Code:
With wbbrondata.Sheets("brondata")
  For Each module In .Range("c4", .Range("c4").End(xlDown))
end with

Maar veel beter is de: wbbrondata.Sheets("brondata").cells(1).currentregion
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan