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

Code Copy PasteSpecial onder bestaande regels werkt niet

Status
Niet open voor verdere reacties.

HBot

Gebruiker
Lid geworden
12 dec 2006
Berichten
325
Forum

ik wil onderstaande code gebruiken om deel van de gegevens te kopieën van de ene sheet ("Rekensheet ME_PP") naar een andere sheet "Stuklijst Recept") te plakken.
nu lukt het wel als ik een harde range aangeeft, maar ik wil dit stukje onder de al bestaande gegevens plakken deze regels variëren in lengte (altijd tot een bepaalde regel hierna begint de volgende reeks)

wat doe ik fout in dit stukje code,
Code:
.Range("a" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues
hij wordt wel netjes geplaats in Sheets("Rekensheet ME_PP") in kolom "a" onderaan daar waar ruimte is.
ik heb geprobeerd om voor deze regel "Sheets("Stuklijst Recept").Select" te plaatsen, maar heeft geen effect.



Code:
Sub Bereken_eindproduct_MEPP()
'Kopieer en sorteer materialen vanuit berekening naar invoerlijst stuklijst masterdata

Sheets("Rekensheet ME_PP").Visible = True
Sheets("Rekensheet ME_PP").Select
Sheets("Rekensheet ME_PP").Range("A45").AutoFilter Field:=1, Criteria1:="v"
If Sheets("Rekensheet ME_PP").Range("A45:" & Range("A" & Rows.Count).End(xlUp).Address).SpecialCells(xlCellTypeVisible).Count > 0 Then
    Range("B46:K86").Copy Range("B87")
    ActiveSheet.ShowAllData
  
    With Sheets("Rekensheet ME_PP")
        .Range("B87:B100").Copy
        .Range("a" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues
        .Range("C87:C100").Copy
        .Range("b" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues
        .Range("I87:I100").Copy
        .Range("c" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues
        .Range("J87:J100").Copy
        .Range("d" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues
        .Range("K87:K100").Copy
        .Range("e" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues
    End With
    
    Sheets("Stuklijst Recept").Select
    Range("B6").Select
End Sub

Gr Henny
 
Je doet alles in sheet "rekenlijst" en niks in sheet "recepten.
probeer het is zo
Code:
Sheets("Rekensheet ME_PP").Range("B87:B100").Copy
Sheets("Stuklijst Recept").Range("a" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial xlPasteValues

zonder select en copy
Code:
Sheets("Stuklijst Recept").Range("a" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).value = Sheets("Rekensheet ME_PP").Range("B87:B100").value
niet getest en kan vast beter.
 
Is een voorbeeldbestand echt zo moeilijk om maken?
 
Emd,

Bedankt voor je reactie, sorry voor mijn late reactie maar al 2 dagen bezig om andere problemen op te lossen.

Edmiels,
een voorbeeld bestandje is in deze lastig omdat dit een groot bestand is en gegevens uit div. sheets samengevoegd moeten worden.
--------
ik heb beide stukjes code uitgeprobeerd maar het effect is hetzelfde.
loopt vast op deze regels.

ik start de code op vanuit sheet Stuklijst Recept
hier staat al een gedeelte gevuld in kolom a t/m g (aantal regels variëren), hetgeen van sheets Rekensheet ME_PP moet onder de regels komen.

ik heb alle regels onderaan de sheet Stuklijst Recept weggehaald (omdat hier vergelijkbare regels staan die ook aangevuld moeten worden)
nu werkt het deels wel..
de gekopieerde regels staat op regel 92 ipv regel 22 in sheet Stuklijst Recept
Regel 92 is ook de eerste vrije regel op sheet Rekensheet ME_PP

vreemd?

hopelijk geeft dit enige duidelijkheid, ik ga proberen een voorbeeld bestandje te maken.
 
Marco bedankt,

ik ga de formule deels gebruiken maakt het wel korter, maar deze verwijst naar vaste cellen om te plakken.
Lost mijn probleem niet op
ik heb een voorbeeldje gemaakt.
via de macro [knop stuklijst aanvullen] moeten de gegevens gefilterd worden op sheet [Rekensheet ME_PP] en dan onder de eerste reeks bestaande gegevens geplaatst worden in de juiste kolom.
deze kan meer of minder regels bevatten.
nu worden de gegevens op regel 64 gezet ipv regel 16

voor de 2e reeks beginnend op regel 66 hiervoor geld hetzelfde maar hier komt een andere code voor (omdat gegevens elders vandaan komen.)
 

Bijlagen

  • formulier 2020 PT Test.xlsm
    66,2 KB · Weergaven: 25
Code:
 With Sheets("Rekensheet ME_PP")
        .Range("B87:B97").Copy
        Sheets("Stuklijst recept").Range("a" &[B][COLOR="#FF0000"] .Cells(Rows.Count, 2).End(xlUp).Row + 1)[/COLOR][/B].PasteSpecial xlPasteValues
        Sheets("Stuklijst recept").Range("a" & [I][COLOR="#008000"]Sheets("Stuklijst recept").Range("A5").End(xlDown).Offset(1).Row)[/COLOR][/I].PasteSpecial xlPasteValues

In rood jouw code. Die verwijst naar het tabblad "Rekensheet ME_PP". Je wilt echter dat dat verwijst naar tabblad "Stukslijst recept".
Probeer het eens met de groene code op de plaats van de rode
 
Haije bedankt

dit werkt
nog wel de juiste kolom (A,B,C etc) aan moeten geven ziet er werkbaar uit, ga het verder uitwerken en gebruiken.

Code:
With Sheets("Rekensheet ME_PP")
        .Range("B87:B97").Copy
        Sheets("Stuklijst recept").Range("a" & Sheets("Stuklijst recept").Range("A5").End(xlDown).Offset(1).Row).PasteSpecial xlPasteValues
        .Range("C87:C97").Copy
        Sheets("Stuklijst recept").Range("b" & Sheets("Stuklijst recept").Range("b5").End(xlDown).Offset(1).Row).PasteSpecial xlPasteValues
        .Range("I87:I97").Copy
        Sheets("Stuklijst recept").Range("c" & Sheets("Stuklijst recept").Range("c5").End(xlDown).Offset(1).Row).PasteSpecial xlPasteValues
        .Range("J87:J97").Copy
        Sheets("Stuklijst recept").Range("d" & Sheets("Stuklijst recept").Range("d5").End(xlDown).Offset(1).Row).PasteSpecial xlPasteValues
        .Range("K87:K97").Copy
       Sheets("Stuklijst recept").Range("e" & Sheets("Stuklijst recept").Range("e5").End(xlDown).Offset(1).Row).PasteSpecial xlPasteValues
    End with
 
HBot,

je kunt ook eerst het regelnummer berekenen en opslaan in een variabele met
Code:
rgl = Sheets("Stuklijst recept").Range("A5").End(xlDown).Offset(1).Row

En dan de variabele rgl gebruiken in
Code:
Sheets("Stuklijst recept").Range("a" & rgl).PasteSpecial xlPasteValues
 
Laatst bewerkt:
Wordt het allemaal niet een stuk eenvoudiger met een gestructureerde bestandsopbouw? Wat het nut is van een lege range kopiëren ontgaat mij. Klopt het bestand wel met de code?
 
V&A
bedankt voor je reactie,

Je bedoeld de lege velden onder de te kopiëren range?
ik weet niet hoe ik code moet aanpassen om die variabel te krijgen, weet een beetje hoe vaste range werken.
Maar wil altijd wat bijleren.

dit is maar een klein stukje van een groter geheel, weet dat het soms een beetje uitgebreid is, maar dan snap ik het nog.

gr
 
in Sheets("Rekensheet ME_PP").Range("B87:B97") staat niets wat wil je dan kopiëren?
 
V&A,
dit is maar een test voorbeeld,
ik het groter bestand zijn deze velden wel gevuld, ook worden er andere velden in andere overzichten gebruikt,

het doel was de juiste code te begrijpen en te gebruiken daarna ga ik dit in het originele bestand aan en toepassen.
de nieuwe regel van Haije zal de code nog korter en overzichtelijke maken.

vraag me af of ik dan voor elke kolom een nieuwe "rgl" (A5,B5 etc.) moet maken.

wordt weer een leuk projectje voor het weekend:cool:
 
Een keer rgl is voldoende, want alles moet toch op dezelfde regel komen?
 
Haije,

klopt,
maar in deze regel moet je wel aangeven in welke kolom, werkt verder perfect.
Code:
Sheets("Stuklijst recept").Range("a" & rgl).PasteSpecial xlPasteValues

ik ga het verwerken in het bestand, op weg naar de volgende uitdaging
gr
 
waarom kopiër je eerst het gefilterde naar onderen?
Je kan toch ook wat je filtert gebruiken dan heb je ook het goede bereik.
 
Marco,

Slim, ze zeggen wel eens als het werkt moet je het niet veranderen, eigenlijk ook nooit verder naar gekeken,
maar zo is de code een heel stuk korter,

bedankt, weer wat geleerd.

gr
Henny
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan