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

VBA - refereren naar dynamische worksheet

Status
Niet open voor verdere reacties.

sandra1978

Gebruiker
Lid geworden
21 feb 2011
Berichten
64
Hallo,

Ik ben nog een groentje met VBA, heb net een 3-daagse cursus gevolgd, en zit vast met het volgende:

Ik wil dat er uit een document bepaalde data worden gekopieerd naar een nieuw document. Dit nieuwe document wordt aangemaakt en krijgt een naam op basis van de celinhoud uit een lijst. Dit wordt telkens herhaald voor het volledige lijstje.
Het lukt mij dit te doen wanneer ik de data kopieer naar nieuwe tabbladen binnen het document, dan kan ik juist refereren. Dat is uiteindelijk niet wat ik wil, dan zit ik met enorm veel tabbladen.
Ik wil nieuwe documenten aanmaken, maar het lukt me niet om te refereren naar het nieuw aangemaakte werkblad (met dus een dynamische naam).

Dus het komt erop neer dat ik niet weet wat ik moet gebruiken om te refereren naar een nieuw bestand, met een dynamische naam, dat ik net met VBA heb aangemaakt.
Ik denk dat ik eerst nog het nieuw aangemaakt workbook moet definiëren, maar geen idee hoe...


Hieronder vind je de VBA code

Code:
    Dim oplbereik As Variant
    Dim oplrooster As Variant
                
    Workbooks("uurrooster_vba test.xlsx").Activate
    Sheets("bereiken").Activate
        For Each oplbereik In Worksheets("bereiken").Range(Range("m2"), Range("m1").End(xlDown))
            Workbooks.Add
            ActiveWorkbook.SaveAs (oplbereik.Value)
            Workbooks("uurrooster_vba test.xlsx").Activate
            Worksheets("rooster").Activate
                For Each oplrooster In Worksheets("rooster").Range(Range("b5"), Range("b4").End(xlDown))
                    If LCase(oplrooster.Value) = LCase(oplbereik.Value) Then
                    oplrooster.EntireRow.Copy [B]workbooks(oplbereik)[/B].Sheets("blad1").Range("a1000000").End(xlUp).Offset(1, 0) 'op deze lijn zit ik dus vast met workbooks enz....
                    End If
                Next
        Next
        
End Sub

In bijlage het gebruikte document.

Alvast bedankt voor de hulp
 

Bijlagen

  • uurrooster_vba test.xlsx
    1,3 MB · Weergaven: 35
Ik zie geen enkele vergelijking tussen kolom M van "rooster" en kolom B van "bereiken".
Conclusie: er hoeft niets gekopieerd te worden naar een nieuw werkboek.

Maar volgens mij bedoel je het andersom.
Kolom M van "bereiken" met kolom B van "rooster".
 
Hallo HSV,

Ik denk dat je het zelf verkeerd hebt gelezen. Er staat wel degelijk kolom M van rooster en kolom B van bereiken :)
Het is me met een aanpassing gelukt om de gegevens te kopieren naar nieuwe tabbladen. Dus ik maak nieuwe sheets aan, geef ze de naam van het oplbereik en kopieer de gegevens naar het nieuw gemaakte tabblad. Op die manier kan ik wel correct refereren.
Maar ik wil geen nieuwe tabbladen aanmaken, maar nieuwe workbooks, en daar loopt het mis met het refereren naar het net aangemaakte workbook.

Groetjes,
Sandra
 
Peren met appels vergelijken?

Tabblad rooster M5 vergelijken met tabblad bereiken kolom B.

Kijken of 17-12 gelijk is aan 2011, 2109, 2121, 2123, theorielokaal, nog te bepalen, etc., etc.
Dat zal mij niet lukken.
 
Ok, verkeerd geantwoord:
In mijn code staat wel effectief:
kolom B voor ROOSTER (opleidingen)
kolom M van BEREIKEN (opleidingen
Dus wel appels met appels :). Misschien moet je nog eens goed kijken in de code.

Echter is dat niet de essentie van mijn vraagstelling...
Maar wel:
Als ik in VBA een nieuw workbook aanmaak met een dynamische naam, hoe kan ik hiernaar refereren? Dus ik zit vast op deze lijn:
Code:
oplrooster.EntireRow.Copy [B]workbooks(oplbereik)[/B].Sheets("blad1").Range("a1000000").End(xlUp).Offset(1, 0)

Volgens mij is dat nogal een basic binnen VBA? Maar ik weet dus niet hoe het moet..:-(
 
Werkt dit wel?
Code:
    Dim oplbereik As Range
    Dim oplrooster As Range
    Dim BronMap As Workbook
    Dim DoelMap As Workbook

    Set BronMap = Workbooks("uurrooster_vba test.xlsx")

    For Each oplbereik In BronMap.Worksheets("bereiken").Range(BronMap.Worksheets("bereiken").Range("m2"), BronMap.Worksheets("bereiken").Range("m1").End(xlDown))
        Set DoelMap = Workbooks.Add
        DoelMap.SaveAs (oplbereik.Value)
        For Each oplrooster In BronMap.Worksheets("rooster").Range(BronMap.Worksheets("rooster").Range("b5"), BronMap.Worksheets("rooster").Range("b4").End(xlDown))
            If LCase(oplrooster.Value) = LCase(oplbereik.Value) Then
                oplrooster.EntireRow.Copy DoelMap.Sheets("blad1").Range("a" & Sheets("blad1").Rows.Count).End(xlUp).Offset(1, 0)    'op deze lijn zit ik dus vast met workbooks enz....
            End If
        Next
    Next
End Sub
 
Hallo JKPieterse,

Super! Het werkt!
Ik dacht inderdaad wel dat ik die workbooks moest definiëren, maar wist niet goed hoe.

Dikke merci
 
Hmm, eigenlijk moest dit:
Code:
oplrooster.EntireRow.Copy DoelMap.Sheets("blad1").Range("a" & Sheets("blad1").Rows.Count).End(xlUp).Offset(1, 0)    'op deze lijn zit ik dus vast met workbooks enz....
zijn:
Code:
oplrooster.EntireRow.Copy DoelMap.Sheets("blad1").Range("a" & Doelmap.Sheets("blad1").Rows.Count).End(xlUp).Offset(1, 0)    'op deze lijn zit ik dus vast met workbooks enz....
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan