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

Kopieren naar eerste lege rij.

Status
Niet open voor verdere reacties.

Mathijs CM

Gebruiker
Lid geworden
19 feb 2009
Berichten
342
Goede morgen.

Ik probeer een macro te maken die gegevens van het ene blad naar het andere blad kopieerd op de eerste lege rij in dat blad.
Voorbeeld:
Blad 1 bevat een formulier met de kolommen A tot en met AG en kan gegevens bevatten in rij 2 tot en met 30. Kan dus ook slecht 1 of 2 rijen zijn. Door middel van filter met uitzondering van lege rijen, kan ik dus selecteren en kopieren.
Aangezien dit blad na invulling weer leeg wordt gemaakt muv de opmaak, wil ik deze gegevens dus kopieren naar blad 2 zodat alle ingevoerde gegevens toch bewaard blijven.
De gegevens dienen dus te worden ingevoegd op de eerste lege rij, hetzij duur gekopieerde rijen invoegen op de 2e rij, of door middel van plakken op de eerste beschikbar lege rij.
Heb verschillende voorbeelden gezien maar begrijp ze niet.
Kan en wil iemand me hiermee op weg helpen?

Met vriendelijke groeten en bij voorbaat dank.

Math
 
waar loop je vast? De macro zelf? het uitvinden van de juiste commando's? de plaatsbepaling van de onderste regel?

De meest gebruikte variant is range("a65000").end(xlup)
 
Heb gebruikt opname voor macro; Dit is de macro zoals hij wordt geschreven door excel.
Als ik hem uitvoer loopt hij echter vast op:

Active Sheet Paste

Sub KNAID()
'
' KNAID Macro
'

'
ActiveSheet.Range("$A$1:$AF$27").AutoFilter Field:=1, Criteria1:="1111"
Rows("2:2").Select
Selection.Copy
Sheets("Alle Ingevoerde Declaraties").Select
ActiveSheet.Range("$A$1:$AF$172").AutoFilter Field:=1, Criteria1:="="
Range("A5").Select
ActiveSheet.Paste
Sheets("Declaraties Invoeren").Select
End Sub
 
Probeer eens.
Code:
Sub HSV()
 With Sheets("Blad1")
  .Range("A2:A" & .Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible).EntireRow.Copy _
  Sheets("Blad2").Cells(Rows.Count, 1).End(xlUp).Offset(1)
 End With
End Sub
 
Mathijs,

probeer dit eens.....

Code:
Sub KNAID()
'
' KNAID Macro
'
ActiveSheet.Range("$A$1:$AF$27").AutoFilter Field:=1, Criteria1:="1111"
Rows("2:2").Select
Selection.Copy
Sheets("Alle Ingevoerde Declaraties").Select
Range("a1").End(xlDown).Offset(1).Select
ActiveSheet.Paste
Sheets("Declaraties Invoeren").Select
ActiveSheet.Range("$A$1:$AF$172").AutoFilter Field:=1, Criteria1:="="
End Sub

Te laat: Ingehaald door HSV, met een veel kortere en algemenre code.
 
Laatst bewerkt:
heel algemeen kun je dit gebruiken:
Code:
Sub testa()
Blad1.Range(Blad1.[a2], Blad1.[d5000].End(xlUp)).Copy
Blad2.Paste (Blad2.[a65000].End(xlUp))
End Sub

dit copieerd alles op kolommen A tot D op blad 1 naar de eerste lege rij op blad 2. tenminste zolang kolom D altijd een waarde heeft. Mocht alleen kolom A altijd gevuld zijn kun je hier een variant van maken.

Code:
'sheets(("Declaraties Invoeren").Range("$A$1:$AF$27").AutoFilter Field:=1, Criteria1:="1111"
Sheets("Declaraties Invoeren").Range(Sheets("Declaraties Invoeren").[a2], Sheets("Declaraties Invoeren").[a50000].End(xlUp).Offset(0, 31)).Copy

Sheets("Alle Ingevoerde Declaraties").Paste (Sheets("Alle Ingevoerde Declaraties").[a65000].End(xlUp))

De offset (nu 31), moet je mogelijk even aanpassen aan het juiste aantal kolomen. AF is uit mijn hoofd de 32ste kolom.

Als aanvulling op mijn eerste post
 
Laatst bewerkt:
Macro doet niet wat ik eigenlijk wil.

In principe bestaat blad 1 dus uit: Kolommen A tot en met AF (dus 32 kolommen) en in totaal 31 rijen.
Rij 1 is rij voor titels van de kolommen.
In rij 2 tot en met rij 30 kunnen dus gegevens worden ingevoerd, maar dat kan dus zijn rij 2 tot en met rij 30, maar ook eventueel slechts rij 2 tot en met 7, waardoor er dus lege rijen overblijven.
Hierna wordt blad weer klaargemaakt voor de eerstvolgende nieuwe invoer. Deze invoer kan dus slechts 1 rij(2) zijn, maar ook 10(rij11) maar ten hoogste 30 rijen zijn.
Misschien is hetgeen ik vraag zelfs niet mogelijk, maar dat weet ik niet zeker.
Ben slechts een beginneling, maar dit lijkt me een mooie uitdaging om het toch te proberen.

Math
 
heb je mijn code geprobeerd? die zou alleen de items uit je filter moeten copieeren, ongeacht 1 of 100 regels. in principe de code van harry ook, maar die heb ik persoonlijk niet getest.
 
Indien kolom A gevuld is zijn ook de andere kolommen gevuld. Welke code moet ik eventueel kopieren naar macro KNAID (kopieren naar alle ingevoerde gegevens. Misschien is het gemakkelijker als ik het voorbeeld stuur, maar ik kan hier volgens mij geen bestanden versturen, dus zou ik een mailadres nodig hebben.

Math
 
Math,

je kunt wel een bijlage bijvoegen.

Al je een bericht maakt, zie je boven het vak waar je tikt o.a. een paperclipje.
Klik daar maar eens op, je kunt dan het betreffende bestand op je PC opzoeken en uploaden (al het niet te groot is).

Succes
 
Op 'Wat' ga je filteren in kolom A.
 
De ingevoerde gegevens kan zijn dat gegevens weg zijn gevallen ivm nieuw scherm maken. Je kunt gewoon bv de rijen 2 en 3 invullen. Geef gewoon bij aantal vragen 50 in, vergoeding 2,00. Hierna dus alleen de ingevulde gegevens selecteren. Dus niet Totaal en lege regels.
 
Run deze code eens.

Alleen deze code en niets van jouw code die aan knoppen of wat dat ook zijn verbonden.
Code:
Sub HSV()
  With Sheets("Invoer declaratie(s)")
   .Range("A2:AG" & .Range("A31").End(xlUp).Row).Copy Sheets("Alle ingevoerde declaraties").Cells(Rows.Count, 1).End(xlUp).Offset(1)
   .Range("E2") = .Range("A31").End(xlUp).Offset(1, 4)
   .Range("A2:D" & .Range("A31").End(xlUp).Row).ClearContents
  End With
End Sub
 
Hoi,

Het werkt perfect, ga nu voor mezelf analyseren wat er staat. Volgens mij moet er dus ook een mogelijkheid zijn om niet alle kolommen maar bv de kolommen loon, vergoedingen, totale onkosten en de 2 datum kolommen apart te kopieren naar een ander werkblad.
Indien ik iets niet begrijp van de macro dan zou ik graag nogmaals contact met je willen opnemen als jij daar geen bezwaar tegen hebt.
Maar nogmaals de macro werkt perfect en het meeste wat in de macro staat begrijp ik, maar moet me even wat gaan verdiepen in de programmataal, zoals offset(1);
.Range("E2") = .Range("A31").End(xlUp).Offset(1, 4)
Groetjes Math
 
Dat kan, alleen wordt de code dan wat langer. Uiteindelijk zijn het allemaal technieken om twee hoekpunten te bepalen ;)

Als lijn 2 tot 20 zijn gevult:

Harry gebruikt:

Range("A2:AG" & .Range("A50000").End(xlUp).Row)

resultaat: een text-gedefinieerde range genaamd "A2:AG20"

Mijn voorbeeld heeft:

.[a2], .[a50000].End(xlUp).Offset(0, 32)

resultaat: een hoekpunten gedefinieerde range tussen "A2" en "AG20" (A20 is de laatste bezette regel in kolom A, met een offset van 0 rijen naar beneden en 32 kolommen naar rechts: AG20)

Beide leveren uiteindelijk eenzelfde range waar je verder mee kunt werken.
 
Dit voorbeeld heeft dus 32 kolommen en maximaal 31 rijen, waarbij rij1 de kolommen zijn met uitleg wat er in de rijen 2 tot en met 31 eventueel komt te staan. In ieder geval zijn alle kolommen ingevuld op de desbetreffende rij als kolom A gevuld is op die rij.
Sub HSV()
With Sheets("Invoer declaratie(s)")
.Range("A2:AG" & .Range("A31").End(xlUp).Row).Copy Sheets("Alle ingevoerde declaraties").Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Range("E2") = .Range("A31").End(xlUp).Offset(1, 4)
.Range("A2:D" & .Range("A31").End(xlUp).Row).ClearContents
End With
End Sub

Betekent dus: Blad (Invoer declaraties)
. range(A2:AG) is rij2 kolom A ten met AG
&.range(A31).end(xlUp) waarbij kolom A rij 31 de laatste gevulde rij kan zijn, waarbij naar boven gezocht moet worden in welke rij kolom A als laatste gevuld.
.Copy gegevens naar (Alle Ingevoerde etc)
.Cells(Rows.Count, 1).End(xlUp).Offset(1) dit begrijp ik niet helemaal
.Range(E2) = .range(A31).End(xlUp).Offset(1, 4) zoeken tussen rij 2 kolom E en rij 31 kolom A ((Offset(1, 4)) bereik rij 1 Kolom A tot en met D??
.Range (A2:D & .Range(A31).End(xlUp).row).ClearContents : rij2KolomA:D en rij31 kolom A zoeken, verwijder de inhoud?

Dus als ik bv hetzelfde wil doen met kopieren van de gegevens in de kolommen A:G; T en U; AD:AG moet dan ook eventueel kunnen lukken, geeft namelijk alleen een samenvatting weer van de berekening.
Op het andere blad zijn ook alleen deze kolommen ingevuld op rij 1
 
De offset is verplaatsen van de gekozen range.

.Range(E2) = .range(A31).End(xlUp).Offset(1, 4)

E2 = onderste waarde van "A", 1 rij naar beneden, 4 kolommen naar rechts. dus als A20 de laatste gevulde waarde is in kolom A staat hier:

e2 = e21 (A20 -> 1 regel naar beneden -> a21 -> 4 kolommen naar rechts -> E21)

in je specifieke geval kun je zoiets doen:
Code:
Sub HSV()
  With Sheets("Invoer declaratie(s)")
   [COLOR="red"]laag = .Range("A5000").End(xlUp).Row[/COLOR]

   [COLOR="red"]Union(.Range("A2:G" & laag), .Range("T2:U" & laag), .Range("AD2:AG" & laag)).Copy Sheets("Alle ingevoerde declaraties").Cells(Rows.Count, 1).End(xlUp).Offset(1)[/COLOR]
   
   .Range("E2") = .Range("A31").End(xlUp).Offset(1, 4)
   .Range("A2:D" & .Range("A31").End(xlUp).Row).ClearContents
  End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan