Blad kopiëren achter laatste tabblad

Status
Niet open voor verdere reacties.

Woffels

Gebruiker
Lid geworden
8 jan 2006
Berichten
251
Ik wil het tabblad genaamd test achter het laatste tabblad in de map kopiëren en gebruik daar de volgende vba code voor:

Code:
Sheets("test").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

Er staat een hoop data in het te kopiëren tabblad (>500k regels) en daardoor duurt dat kopiëren meer dan 100 sec. Is er een snellere manier?
 
Screenupdating uitzetten
calculation uitzetten

Maar waarom dubbele gegevens in 1 bestand ?

voldoende is

Code:
Sheets("test").Copy ,Sheets(Sheets.Count)
 
Laatst bewerkt:
Ik haal externe data binnen via PQ in blad "test", die wordt bewerkt en dan naar achter gekopieerd en dat tabblad krijgt een nieuwe naam. In de volgende stap haal ik opnieuw data binnen van een andere bron en die kopieer ik dan ook weer naar achteren. Zo krijg ik een hele verzameling van gegevens van verschillende bronnen.
 
Is het dan niet handiger een nieuw, eerste werkblad te maken voor de volgende PQ-import ?

Code:
sheets.add sheets(1)
 
PQ laadt altijd naar blad test, daar heb ik geen invloed op. Dus blad test, daar komt steeds de nieuwe data op binnen via PQ, die ik dan vervolgens met nieuwe naam achter het laatste blad kopieer. Mss kan ik wel een eerst een nieuw blad aanmaken achter de laatste en dan de inhoud van blad setup één op één kopieer naar dat nieuwe blad. Setup bevat altijd een tabel en kan een grafiek bevatten die allebei mee moet met de kopieer actie. Dus elke tabel en elke grafiek van tabblad setup moet naar dat nieuw gemaakte blad op dezelfde positie als in het setup blad.
Hoe kan ik dat het meest efficiënt doen? Dan zal ik eens kijken of dat sneller gaat
 
Hernoem het gevulde blad Test en maak een nieuw blad Test aan. Het hernoemde blad kun je eenvoudig naar rechts "schuiven".
 
Aan het blad test zit de query, die schuift dan mee en dat mag niet.
 
Ik zal eerst eens kijken of ik die query aan een ander blad kan toewijzen, dan is er helemaal geen kopieer of schuifactie nodig.
 
In de volgende stap haal ik opnieuw data binnen van een andere bron
Maar volgens mij moet je die query toch weer iedere keer wijzigen, omdat het om andere gegevens gaat.
De query verwijderen uit het blad dat klaar is, lijkt me geen klus.
 
Laatst bewerkt:
Query verandert juist niet en dat moet ook zo, de query krijgt wel steeds een andere bron toegewezen met andere data, maar wel met dezelfde opbouw. Die data wil ik onder een ander tabblad opslaan en doe dat nu door het blad waar de data binnenkomt weg te kopiëren en biedt dan weer een andere bron aan. In dit geval gaat hem om csv's met gegevens op een server. In pq kan je met een truc en vba de bron wel wijzigen, maar het veranderen van de bestemming met vba lukt nog niet. Zou toch moeten kunnen zou je zeggen.
 
Dit is het uiteindelijk geworden.
Voor nu kopieer ik de volledige tabel van blad donor via een array met een functie naar het tabblad achteraan met de naam die met variabele "Sensor" meekomt. Dit werk twee keer zo snel als het tabblad kopiëren en hernoemen. Zou dit nog efficiënter kunnen? In feite wil ik de tabel op tabblad donor kopiëren naar een nieuw tabblad aan het einde van de worksheet met de tabnaam die met de variabele "donor" meekomt.


Code:
Function CopyDonor(ByVal Sensor As String)
    Dim Source As Worksheet
    Dim tbl As Range
    Dim tblData As Variant
    Dim Destination As Worksheet
    Dim tblAlsBereik As Range
    
    Set Source = ThisWorkbook.Worksheets("Donor")
    Set tbl = Source.ListObjects("Donor").Range
    tblData = tbl.Value
    Set Destination = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    Destination.Cells(1, 1).Resize(UBound(tblData, 1), UBound(tblData, 2)).Value = tblData
    Destination.Name = Sensor
    Set tblAlsBereik = Destination.Range("A1").CurrentRegion
    Destination.ListObjects.Add(xlSrcRange, tblAlsBereik, , xlYes).Name = Sensor
End Function
 
Een Function is bedoeld om waarde(n) door te geven aan de aanroepende macro, niet om akties in een bestand uit te voeren.
Vermijd overbodige Object-variabelen.
 
Laatst bewerkt:
Dat doe ik toch ook, ik geef een waarde mee die de naam aan het nieuwe tabblad en tabel gaat geven.
 
Een function eindigt altijd zó:

Code:
Function [COLOR=#ff0000]F_snb[/COLOR](c00)
     '  code
     [COLOR=#ff0000]F_snb[/COLOR]="waarde"
End Function

In jouw Function ontbreekt:
Code:
 CopyDonor="waarde"

NB. aan een Sub kun je ook argumenten doorgeven.
Jouw code bevat 4 overbodige Object-variabelen.
 
Laatst bewerkt:
Dat wist ik dus niet, dan misbruik ik functies al jaren. Nooit te oud om te leren
 
Laatst bewerkt:
Dat wist ik dus niet, dan misbruik ik functies al jaren.
Je kunt best functies gebruiken om acties uit te voeren, dat is géén misbruik :). Ook al kun je dezelfde acties ook uitvoeren met een Sub. Ook qua snelheid (wat nog een argument zou kunnen zijn) is er geen verschil.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan