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

Macro Selectie uit diverse tabbladen in nieuw bestand plakken

Status
Niet open voor verdere reacties.

robinvdveeken

Gebruiker
Lid geworden
7 sep 2010
Berichten
84
Goedenmiddag,

Inmiddels loop ik tegen een probleempje aan.
Ik heb een bestand waarin een heleboel datastaat, voornamelijk lijsten. (8,5mB)
Deze file gebruik ik als template, hier worden specifieke keuzes gemaakt.
Deze specifieke keuzen moeten appart worden opgeslagen, maar daarbij is het overbodig om dan zeker 50x per dag al die data er bij op te slaan.

Nu wil ik hiervoor graag een selectie uit diverse tabbladen maken, soms kollomen en soms losse cellen.
Deze selecties wil ik dan in vaste volgorde in een nieuw bestand, ook op verschillende tabbladen plakken. Uit dit bestand kan ik dan een printable versie maken.

Ik denk dat de code zoiets moet gaan lijken:

Code:
Sub Create_file ()
Thisworkbook.sheets("boeken").Range(V:W).copy
While  Activeworkbook.Save as replace(thisworkbook.Nieuwbestandsnaam".xls"000,xl")
.close false
Thisworkbook.sheets("Ingave").Range(V10:W12).copy
While  Activeworkbook.Save as (thisworkbook.Nieuwbestandsnaam".xls"000,xl")
.close false


End Sub


Toch denk ik dat deze manier uiteindelijk niet gaat werken.
Ik weet namelijk niet hoe ik selecties in het doel bestand aan kan geven.

Kan iemand mij helpen?
Alvast bedankt.

Groeten,
Robin
 
Robin,

Je zult moeten werken met een bron locatie en een bestemming locatie.
Je zult namelijk moeten aangeven welke gegevens je van A naar B wilt kopiëren.

Bedenk goed waar je aan begint want als je dit op basis van selecties wilt doen dan heb je er een hele kluif aan om het programma technisch te bouwen laat staan te onderhouden.
Er hoeft namelijk maar iets in je "Template" te wijzigen en je gehele programmering gaat aan de haal.
 
Bedankt voor de tip Superzeeuw,

Code zo open mogelijk schrijven is lijkt me het doel van iedere programmeur. Daar hangt tenslotte de werkbaarheid van dat gene dat je hebt gemaakt van af.

In deze situatie is het zo dat er klantspecifieke data word gegenereerd vanuit een template bestand. In de testfase werd de gehele template onder een andere bestandsnaam opgeslagen. Dit betekend per klant zo'n 8mB aan overbodige data. Niet iets waar je als programmeur trots op kan zijn.

De 'intilligentie' zit de template, deze zet de gegenereerde data keurig op de aangewezen plaatsen. In de kopie gaat het erom dat de data netjes onder elkaar, met wat tekst ter verduidelijking komt te staan. Dit kan dus één op één worden gekopieerd.
Een scriptje schrijven die de data kopieerd vanuit kolomen totdat deze een aantal witregels tegenkomt hoeft niet lastiger te zijn dan zoiets:

Code:
While empty_regel < 5

    If Range("B" & Regel_nr) <> "" Then 'Omschrijving moet ingevuld zijn
       
##code##

       empty_regel = 0
       IO_regel_nr = IO_regel_nr + 1
    Else
        empty_regel = empty_regel + 1
    End If
    Regel_nr = Regel_nr + 1
Wend

Ik wil ook graag de omlijning mee kopieeren. Hoe dit moet moet ik nog uitzoeken maar mijn idee gaat uit naar iets van "Selection.Borders"

Als ik het verder heb uitgewerkt laat ik weer even van me horen.
Zijn er nog tips over het genereren van een nieuw bestand?

Alvast bedankt.

Groeten,
Robin
 
Onderstaande heb ik in een ver verleden eens geschreven om verschillende data naar een ander bestand te schrijven. Wellicht kan je de idee erachter gebruiken in jouw bestand. Voor de rest zijn er nog teveel vragen om je een gericht antwoord te geven nl. bestaat dit printable bestand reeds of moet het worden aangemaakt, welke namen hebben de tabbladen waarheen geschreven moet worden, moet het bestand dan opgeslagen worden onder een bepaalde naam of wordt het steeds hergebruikt, welke bereiken moeten naar welke plaats op de respectievelijke tabbladen geschreven worden ?
Code:
Sub Overbrengen()
    Application.ScreenUpdating = False
    Dim wsFrom As Worksheet, wsTo As Worksheet
    'oFileName = "D:\Mijn documenten\Zaak\Faktuur\Faktuur.xls" 'Bronbestand
    Workbooks.Open ("D:\Mijn documenten\Zaak\Faktuur\Factuurlijst.xls") 'Doelbestand
    ThisWorkbook.Activate
    Set wsFrom = Workbooks("Faktuur.xls").Worksheets("Faktuur") 'Bronwerkblad
    Set wsTo = Workbooks("Factuurlijst.xls").Worksheets("Lijst2008") 'Doelwerkblad
        With wsFrom
            .[B8].Copy
            wsTo.Cells(Rows.Count, 2).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
            .[H8].Copy
            wsTo.Cells(Rows.Count, 3).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
            .[H11].Copy
            wsTo.Cells(Rows.Count, 4).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
            .[H47].Copy
            wsTo.Cells(Rows.Count, 5).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
            .[H46].Copy
            wsTo.Cells(Rows.Count, 6).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
        End With
    [A1].Select
    Application.ScreenUpdating = True
    Workbooks("Factuurlijst.xls").Close SaveChanges:=True
    'Windows("Faktuur.xls").Activate
End Sub
 
Bedankt Rudi!

Ik denk dat ik hier een werkbaarbestand uit kan maken.
Dat de gegevens niet volledig waren is juist. Het lijkt me dan ook niet de bedoeling dat forumlieden hapklare bestanden gaan maken.
Nogmaals bedankt! Ik zal het bestand posten als het klaar is.

Heeft iemand een idee hoe ik de omlijning kan mee kopieeren?

Groeten,
Robin
 
Hiervoor kopieër je eerst de waarde v/d broncel en daarna plak je er de opmaak overheen
Code:
Sub tst()
[A1].Copy
With [C1].Offset(1)
    .PasteSpecial xlPasteValues
    .PasteSpecial xlPasteFormats
End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan