Hoe refereren naar net gemaakt werkbook

Status
Niet open voor verdere reacties.

sandra1978

Gebruiker
Lid geworden
21 feb 2011
Berichten
64
Hallo,

Ik heb een lijst met: opleidingen, en modules die in die opleidingen zitten (brondata). De bedoeling is dat er voor elke opleiding een nieuw werkbook gecreëerd wordt (dit lukt). Dan moet er voor elke module binnen de opleiding, een tabblad gemaakt, dat er telkens hetzelfde uitziet (een bepaald sjabloon).

Ik zit vast met:
- het aanmaken van de tabbladen lukt, maar dit gebeurt niet in het net aangemaakte document.
- ook lukt het me niet het sjabloon als tabblad te gebruiken ipv een leeg tabblad

Kan iemand me helpen?
Code:
ub MCr_LeerPlanDoelStellingen()

    Dim module As Variant
    Dim opl1 As Variant
    Dim opl2 As Variant
    
    
    
    Set shsjabloon = Workbooks("lpd_sjabloon.xlsx").Sheets("sjabloon")
    Set wbsjabloon = Workbooks("lpd_sjabloon.xlsx")
    Set wbbrondata = Workbooks("brondata.xlsx")
      
    For Each opl1 In wbbrondata.Worksheets("opleidingen").Range("a1:a35")
        
        shsjabloon.Activate
        wbsjabloon.SaveCopyAs "O:\03_Harde_grafische_technieken_ambachten\8_onderwijspraktijk\11_leerplandoelstellingen\" & opl1.Value & ".xlsx"
        For Each opl2 In wbbrondata.Worksheets("brondata").Range("a5:a300")
               If LCase(opl2.Value) = LCase(opl1.Value) Then
               'refereer naar net gemaakt werkbook, hoe?
               Sheets.Add 'maar eigenlijk moet ik het sjabloon invoegen
               ActiveSheet.Name = opl2.Offset(0, 3).Value 'er wordt een tabblad toegevoegd met de juiste naam, maar niet in het juiste document
               
               End If
        Next
    Next
End sub

Bedankt alvast
 

Bijlagen

  • LPD_sjabloon.xlsx
    9,3 KB · Weergaven: 27
  • Brondata.xlsx
    33,5 KB · Weergaven: 19
Laatst bewerkt:
Je toont VBA-code; die bevindt zich echter niet in een van de bestanden.
 
Nee, ik zet die in de map personal, het is een bestand zonder macro's, maar ik voer ze wel uit. Dat maakt verder toch niet uit of wel? Ik kan tot op een punt uitvoeren wat werkt, dus... ?
 
Hoe het resultaat eruit moet zien is me nog niet duidelijk
 
Laatst bewerkt:
De bedoeling is dat ik per opleiding (kolom A in brondata, dus automechanica, cad-tekenaar,...) een apart excel bestand krijg.
In elke nieuw gemaakte opleidingsexcel, komt een tabblad per module (kolom D in brondata, dus auto-diagnose 1, auto-diagnose 2, etc.) Uiteraard enkel die modules van automechanica in de net gemaakte excel automechanica. Deze nieuwe tabbladen moeten niet leeg zijn, maar het LPD_sjabloon.
 
Je moet er eerst voor zorgen dat de gegevens die in kolom D staan voldoen aan de eisen die excel stelt aan de namen van tabjes. Je kan dan dan deze code proberen. Wel even het pad aanpassen.

Code:
Sub VenA()
  c00 = "E:\Temp\Test\"
  With GetObject(c00 & "Brondata.xlsx")
    ar = .Sheets("brondata").Cells(4, 1).CurrentRegion
    .Close 0
  End With
  Set c01 = Workbooks.Open(c00 & "LPD_sjabloon.xlsx").Sheets("sjabloon")
  Set d = CreateObject("Scripting.Dictionary")
  
  For j = 2 To UBound(ar)
    d(ar(j, 1)) = d(ar(j, 1)) & "|" & ar(j, 4)
  Next j
  
  For Each it In d
    ar1 = Split(Mid(d.Item(it), 2), "|")
    c01.Copy
    With ActiveWorkbook
      .Sheets(1).Name = ar1(0)
      For j = 1 To UBound(ar1)
        .Sheets(1).Copy , .Sheets(.Sheets.Count)
        ActiveSheet.Name = ar1(j)
      Next j
      .SaveAs c00 & it & ".xlsx", 51
      .Close 0
    End With
  Next it
  c01.parent.Close 0
End Sub
 
Laatst bewerkt:
Hallo,

Bedankt voor deze goede oplossing.

Nu, het werkte goed, maar ik moest mijn lijst nog updaten dus ik kon het nog niet volledig uitrollen. Ook het sjabloon moest nog wat opgesmukt worden.
Ik wil het opnieuw proberen, en het loopt telkens vast op de lijn:

With ActiveWorkbook
.Sheets(1).Name = ar1(0)

Ik krijg de foutmelding: "het subscript valt buiten het bereik. Ik snap er niets van, gezien ik enkel wat inhoud in de documenten heb aangepast, maar geen namen van tabbladen of dergelijke. Ik heb het ook nog eens geprobeerd met de oorspronkelijke bestanden die ik hier heb gepost, en dat lukt me ook niet meer- :-(.
Ik snap er niets van.
Zou je misschien nog eens kunnen kijken.
In bijlage vind je de ondertussen aangepaste documenten.
 

Bijlagen

  • Brondata.xlsx
    39,2 KB · Weergaven: 13
  • LPD_sjabloon.xlsx
    607,2 KB · Weergaven: 22
Wijzig
Code:
 For j = 2 To UBound(ar)
eens in
Code:
 For j = [COLOR="#FF0000"]5[/COLOR] To UBound(ar)
 
Hallo VenA,

Super , het werkt!

Alleen...zou je me kort kunnen uitleggen wat ik nu heb aangepast, want dat snap ik niet zo goed, zeker niet in combi met dat het leek alsof het werkblad (sheet(1)) niet gevonden werd.
De ubound functie is sowieso nogal nieuw voor me. Zoals je ziet had ik het initieel helemaal anders aangepakt.
 
Gebruik vanuit de VB-editor de <F8> toets om door code te wandelen. Zorg ervoor dat je het 'Locals venster' hebt aan staan. je kan dan precies zien wel variabel welke waarden krijgt. Door de minimale aanpassing in jouw tab 'brondata' klopte het bereik van
Code:
ar = .Sheets("brondata").Cells(4, 1).CurrentRegion
niet meer. Dit kan je in het werkblad ook eenvoudig testen door in A4 te gaan staan en dan <Ctrl>+<a> in te drukken. Zie het verschil in beide bestanden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan