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

Dagbladcopy samenvoegen bij Dagblad via VBA

Status
Niet open voor verdere reacties.

grema

Gebruiker
Lid geworden
2 dec 2006
Berichten
659
Hoi,

Ben er weer terug, laat jullie niet in slaap vallen !!
Heb voor mij weer een moeilijk probleem ; voor jullie waarschijnlijk "no problem ".
laat ons dit hopen.

M'n probleem :
ik heb een bestand = Dagblad
heb een tweede bestand = Dagbladcopy

Deze 2 bestanden zijn identiek. Nu wil ik ze samenvoegen via een VBA code.
Heb reeds onderstaande code gevonden.
Maar het loopt nog vast .

Code:
Sub DagbladSamenvoegen()
'
' Macro1 Macro
' De macro is opgenomen op 25/08/2007
'
' Sneltoets: CTRL+s
'
    Windows("DagbladCOPIE2.xls").Activate
   [COLOR="Blue"] ' hierbij moeten de 2 werkbladen openstaan !  Waarom kan dit niet bij 1  gesloten werkblad[/COLOR]    Sheets(Array("Totaal", "David", "Pascal", "Klanten", "Werknemers", "Specificatie", _
        "uur", "Info", "Leveranciers")).Select
    Windows("DagbladCOPIE.xls").Activate
    ActiveWindow.WindowState = xlNormal
    ActiveWindow.WindowState = xlNormal
   Windows("DagbladCOPIE2.xls").Activate
  [COLOR="blue"] 'De bladen van DagbladCOPIE2.XLS dragen dezelfde naam[/COLOR]
   
    Sheets(Array("Totaal", "David", "Pascal", "Klanten", "Werknemers", "Specificatie", _
        "uur", "Info", "Leveranciers")).Paste  [COLOR="Blue"]'Hier  geeft i fout code[/COLOR]
       [COLOR="Blue"] 'copy naar eerste vrije lijn op Dagblad.xls[/COLOR]
        
        
        
   Dim Response
    Response = MsgBox(" Geef cel waar copy moet staan !!! Doorgaan ?", vbYesNo, " Copy ?")
    If Response = vbYes Then

    
   End If
   
End Sub

ziet iemand hiervoor een oplossing ??
 
Geraak er niet uit !!!


in bijlage bestandje. Elke werknemer krijgt bijgevoegd bestand mee op PC;
Einde van elke dag / week worden gegevens gecentralisiseerd ( komen via e-mail binnen)
De bedoeling is nu dat ik op een eenvoudige manier deze bestanden kan werken op
1 bestand ( vb . : invoegen van al de gegevens ( alle " bladen" ) met 1 knop zoals ik hierboven reeds aangaf. Dit om alle gegevens van de werknemers te verwerken ; het komt immers voor dat er meerdere werknemers op eenzelfde werf aanwezig zijn.
 
zoals wigi aangaf in m'n vorige vraag :

om de boel eenvoudig te houden geef ik hierbij m'n nieuwe formulering van de vraag met 2 voorbeelden.

Ik heb 2 identieke bestanden ; nml Map1 en Map2

Ik wil nu via een opdracht knop in Map1 de gegevens gaan halen uit Map2 ( maar dan enkel deze op blad 2 uit deze Map2)

Trachte reeds op verscheidenen manieren ; maar geraak er niet .

Zet in bijlage Map 1 en Map 2

Kan iemend me corrigeren want al de VBA CODES zijn me nog niet duidelijk.

grema
 

Bijlagen

Grema, Je wilt dus zeggen dat sheet 'P' in Map1.xls de 'verzamelsheet' is van alle andere sheets 'P' in de overige Mappen.

Als dat zo is, moet je maar ff kijken of je hier iets aan hebt...

Groet, Leo
 

Bijlagen

Leo,

Ziet er goed uit .
Alleen kleine opmerking.--- Wanneer ik één copy maak van Map2 blad "P" dan plaatst de code alles mooi onder elkaar.
Waneer ik echter x- dagen later opnieuw een copy maak dan plaats hij alles eronder.
Bestaat de mogelijkheid om eerst te resetten en dan alles opnieuw te plakken.


grema
 
Grema, Maar het was toch de bedoeling dat alle data netjes onder elkaar kwam te staan? Dan is het toch juist goed dat je niet steeds alles weggooit?
Als je het persé geautomatiseerd wilt hebben, zou ik kiezen voor een knop op sheet 'P' en daar deze code achter zetten....
Code:
Sub VerwijderData()
    Columns("A:D").ClearContents
    Range("A1").Select
End Sub

Pas wel op natuurljk! Er zit geen enkele beveiliging of waarschuwing! Op de knop drukken = data kwijt!!!!

Groet, Leo
 
Leo


Heb de code ondertussen nog even aangepast omdat dit een test bestand is ( om te leren) en ik deze gegevens wens in te vullen in een reeds veel groter wordend bestand samen met en door ( en onder invloed van :) dit forum ) opgemaakt en uitgebreid bestand .

Hierbij wens ik de data te laten starten op lijn 6. en wel degelijk al de gegevens telkens op te halen en te overschrijven.

Misschien was m' n uitleg niet al te best. Sorry hiervoor.

Wat denk je van volgende aanpassing in jou code of loopt het dan volledig mis.

Code:
Sub copyblad2map2()
[COLOR="Blue"]ThisWorkbook.Sheets("P").Select
Sheets("P").Select
Range("A6:I5600").ClearContents[/COLOR]
Dim LastCell As String
    
    Application.ScreenUpdating = False
    
    ThisWorkbook.Sheets("P").Select
    LastCell = Range("A65536").End(xlUp).Offset(1).Address
    
    Windows("Map2.xls").Activate
    Sheets("P").Range("A6").CurrentRegion.Select
    Selection.Copy
    
    Windows("Map1.xls").Activate
    Range(LastCell).Select
    ActiveSheet.Paste
    Range(LastCell).Select
    
    Application.ScreenUpdating = True

End Sub


grema
 
Grema, Ik snap je vrees ik nog steeds niet goed. Als ik deze post van je lees...
Elke werknemer krijgt bijgevoegd bestand mee op PC;
Einde van elke dag / week worden gegevens gecentralisiseerd ( komen via e-mail binnen)
De bedoeling is nu dat ik op een eenvoudige manier deze bestanden kan werken op
1 bestand ( vb . : invoegen van al de gegevens ( alle " bladen" ) met 1 knop zoals ik hierboven reeds aangaf. Dit om alle gegevens van de werknemers te verwerken ; het komt immers voor dat er meerdere werknemers op eenzelfde werf aanwezig zijn.
...ga ik er van uit dat je dus meerdere bestanden wilt samenvoegen in 1 'verzamelbestand'. Door nu die coderegel (met clearcontents) op te nemen in de code die zorgt voor het binnenhalen van de data van de verschillende medewerkers, zal je verzamelsheet dus IEDERE keer geschoond worden. Vandaar mijn idee op dit af te vangen in een aparte sub.

Als je de code wilt behouden zoals je voorstelt, krijg je het volgende
Code:
Sub copyblad2map2()
Dim LastCell As String
    
    Application.ScreenUpdating = False
    
    ThisWorkbook.Sheets("P").Select
    [COLOR="Blue"]Range("A6:I65536").ClearContents[/COLOR]
    LastCell = Range("A65536").End(xlUp).Offset(1).Address

rest van de code...

Ik vraag me verder wel af of deze regel...
Code:
LastCell = Range("A65536").End(xlUp).Offset(1).Address
...dan nog nodig is! Je wilt per slot van rekening voortaan vanaf cel A6 beginnen te plakken...

Groet, Leo
 
Leo,


Zal alles even ( dus niet meer vandaag ) plakken in m'n basis map en dan gaan testen.
Zien wat er gebeurt.


Hou je zeker op de hoogte.

Basis blijft. Map1 is basis
Map2 daarvan wordt 1 blad nml "P" ingevoegd en overschreven .

Waarom : omdat er al zoveel formules samenhangen en ik een globaal overzicht wil krijgen.
Zal morgen zien of de boel draait zoals ik hoopte en laat jullie zeker iets weten.


groet en dank

grema
 
leo & collega's

Zoals beloofd . over de mogelijkheden even geslapen en nu alles getest.
loop toch nog even vast.
bij volgende code :
uw code in vb :

Code:
Windows("Map1.xls").Activate
    Range(LastCell).Select
    ActiveSheet.Paste
    Range(LastCell).Select

Heb deze code willen aanpassen naar mijn uitgebreid bestand en heb er dit van gemaakt
Code:
  Windows("DAGBLADg.xls").Activate
    Sheets("Pascal").Select
    Range(LastCell).Select
    [COLOR="Red"]ActiveSheets("Pascal").Paste[/COLOR]
    Range(LastCell).Select


Loopt vast in rode opmerking.

Voor de duidelijkheid :bladen staan in volgende volgorde
Totaal--David--Pascal-- enz

Misschien is dit belangrijk naar de plaats waar ik wil kopieren ik vertrek met opdracht knop vanuit blad "David".


Zoals je ook aangaf gisteren : het bestand op blad "P" ledigen is gevaarlijk . Daar slaap ik nog even over.

Kan je voor me de knoop ( fout) in de bovenstaand code corrigeren.

met dank

grema
 
Grema, je zal een keuze moeten maken (mbt de fout in de code...:)). Het is óf...
Code:
Sheets("Pascal").Paste
...óf...
Code:
ActiveSheet.Paste
De combinatie wordt inderdaad niet als 'prettig' ervaren...:D
De volgorde van de sheets maakt niet uit. Je roept ze namelijk 'bij naam' aan.

Groet, Leo
 
Leo

de volgende code loopt vast in het blauwe gedeelte
Kan je me even meegeven waarom.

Is de volgorde van openen op de pc van belang ( eerst DAGBLADg en dan DAGBLADp (( in mijn geval)) ?)

gebruikte zowel code : " ActiveSheets.Paste" als Sheets("Pascal").Paste

beiden geven een gele kader in code !!!

gebruik volgende code
Code:
Sub copybladpascal()

Dim LastCell As String
    
    Application.ScreenUpdating = False
    
    ThisWorkbook.Sheets("Pascal").Select
    Range("A6:I65536").ClearContents
    LastCell = Range("A65536").End(xlUp).Offset(1).Address
    
    Windows("DAGBLADg.xls").Activate
    Sheets("Pascal").Range("A6").CurrentRegion.Select
    Selection.Copy
    
    Windows("DAGBLADg.xls").Activate
    Sheets("Pascal").Select
    Range(LastCell).Select
   [COLOR="Blue"] ActiveSheets.Paste[/COLOR]
    Range(LastCell).Select
    
    
    Application.ScreenUpdating = True

help je me er even door ?
 
Andere code ingeplakt :

Code:
Sub copybladpascal()
Dim LastCell As String
    
    Application.ScreenUpdating = False
    
    
    
    ThisWorkbook.Sheets("Pascal").Select
    Range("A6:I65536").ClearContents
    LastCell = Range("A65536").End(xlUp).Offset(1).Address
    
    
    Windows("DAGBLADp.xls").Activate
    Sheets("Pascal").Range("A6").CurrentRegion.Select
    Selection.Copy
    
    Windows("DAGBLADg.xls").Activate
    Range(LastCell).Select
    Sheets("Pascal").Paste
    Range(LastCell).Select
    
    Application.ScreenUpdating = True

End Sub

hierbij krijg ik eerst foutmelding 1004 tijdens uitvoering
Methode Paste van klasse Worksheet is mislukt

Indien ik de code dan Copy opdracht knop opnieuw aanklik dan:

krijg ik melding van " het blad dat U wil verplaatsen of kopieren bevat el de naam ...

Indien ik Ja in geef voor al de malen dat de bladen identiek zijn, dan kan ik pas copieren .

Dus volgens mij is de code NIET WATERDICHT . nochtans leek me uiteindelijk hetzelfde als in jou voorbeeld.

Wat loopt er dan fout ??
grema
 
Grema, ff snel (zit eigenlijk met visite..) maar de syntax is activesheet.paste, niet activesheets. Kijk even wat er dan gebeurt. Geef reactie en ik kijk morgen weer met je mee....

Groet, Leo
 
ok leo

zie het dan moren even verder aan , met correctie lukt het ook niet
dus behoud ik men bovenstaande code

tot morgen

grema
 
Hoe het kopiëren normaal gebeurt, is zonder Activate, Select en wat weet ik nog allemaal ;)

Dus dit

Code:
Selection.Copy
    
    Windows("DAGBLADg.xls").Activate
    Range(LastCell).Select
    Sheets("Pascal").Paste

moet vervangen worden door zoiets als dit:

Code:
Selection.Copy Workbooks("DAGBLADg.xls").Sheets("Pascal").Range("juiste verwijzing naar plaats waar geplakt wordt")

bijvoorbeeld

Code:
Selection.Copy Workbooks("DAGBLADg.xls").Sheets("Pascal").Range("E5")

Wigi
 
Laatst bewerkt:
Wigi ; Leo

De opmerking van Wigi lijk te functioneren.


paste alsvolgt aan :
Code:
Sub copybladpascal()
Dim LastCell As String
Application.ScreenUpdating = False
    
    
    
    ThisWorkbook.Sheets("Pascal").Select
    LastCell = Range("A65536").End(xlUp).Offset(1).Address
    Sheets("Pascal").Range("A6").CurrentRegion.Select
    Selection.Copy
    
    Windows("DAGBLADg.xls").Activate
    Range(LastCell).Select
    Sheets("Pascal").Paste
    Range(LastCell).Select
    
    Application.ScreenUpdating = True

Alleen blijft er dan nog de vraag :
1) waarom vraagt het programma of ik de andere bladen wil overnemen.
2) moeten de beide bestanden in een bepaalde volgorde geopend worden
3) Indien in bestand DAGBLADp en DAGBLADg op tablad verschillende klanten staan en ik deze wil samenvoegen ; wat dan ?? Klanten -blad samenvoegen en onder elkaar plaatsen . Maar wat dan met dubbele namen ( vb zoals JANSSENS .... )

Weer een pak vragen maar als leek wil je graag wat opsteken ?

alvast dank voor de uitleg en de hulp.


grema
 
Sorry

verkeerde code geplakt ( uit verkeerd werkblad)

deze moest het zijn :
Code:
Sub copybladpascal()
Dim LastCell As String

    Application.ScreenUpdating = False
    
    
    ThisWorkbook.Sheets("Pascal").Select
    Range("A6:I65536").ClearContents
    LastCell = Range("A65536").End(xlUp).Offset(1).Address
    
    Windows("DAGBLADp.xls").Activate
    Sheets("Pascal").Range("A6").CurrentRegion.Select
    Selection.Copy Workbooks("DAGBLADg.xls").Sheets("Pascal").Range("A6")

 
    
    Application.ScreenUpdating = True

End Sub

Rest van de vragen blijven zoals hierboven

grema
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan