[Excel] Macro gegevens plakken in onderste lege rij

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Chrissyvh
  • Registratie: Oktober 2022
  • Laatst online: 03-11-2022
Hi all,

Ik ben bezig met een Excel bestand voor mijn werk. Ik ben zelf niet echt heel bekend met Excel, dus ben al redelijk trots hoe ver ik ben gekomen, maar nu loop ik toch een beetje vast. Door mijn weinige kennis van Excel weet ik niet of mijn uitleg duidelijk is. Maar ik ga het proberen:

Het gaat om een bestand met twee tabbladen. In tabblad 2 voer ik de gegevens van een product in. Dit staat horizontaal (in een rij). Zodra alle gegevens hiervan zijn ingevuld, kopieer en plak ik deze volledige rij door middel van een Macro naar tabblad 1.

Nu staat mijn macro zo ingesteld dat de gekopieerde rij wordt geplakt op rij 2 van tabblad 1. Dus telkens schuiven de reeds geplakte artikelen een plekje op naar beneden. Niks wordt dus overschreven. Maar het liefst heb ik dat de meest recent geplakte rij onderaan het bestand wordt geplakt. Dus bij de eerstvolgende lege rij in tabel 1.

Op dit moment staat het als volgt:
- Als derde toegevoegd
- Als tweede toegevoegd
- Als eerste toegevoegd

En ik zie het graag als volgt:
- Als eerste toegevoegd
- Als tweede toegevoegd
- Als derde toegevoegd

Mijn macro hoe hij nu is:
Rows("19:19").Copy
Sheets("Import").Select
Rows("2:2").Select
Selection.Insert Shift:=xlDown
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A2").Select
Sheets("Invoer").Select
Range("A19").Select
Sheets("Import").Select
End Sub

Kan iemand mij hier verder mee helpen (en als het mogelijk is in jip-en-janneketaal voor een leek als ik? :)

Beste antwoord (via Chrissyvh op 11-10-2022 13:34)


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Chrissyvh schreef op dinsdag 11 oktober 2022 @ 12:19:
Nu staat mijn macro zo ingesteld dat de gekopieerde rij wordt geplakt op rij 2 van tabblad 1. Dus telkens schuiven de reeds geplakte artikelen een plekje op naar beneden. Niks wordt dus overschreven. Maar het liefst heb ik dat de meest recent geplakte rij onderaan het bestand wordt geplakt. Dus bij de eerstvolgende lege rij in tabel 1.
Voer in Google eens in: "Excel vba laatste rij" en je vindt tientallen websites waarin wordt uitgelegd hoe je de laatste rij vindt. De eerste lege rij na de laatste rij is dan: Laatste rij + 1 .

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Chrissyvh schreef op dinsdag 11 oktober 2022 @ 12:19:
Nu staat mijn macro zo ingesteld dat de gekopieerde rij wordt geplakt op rij 2 van tabblad 1. Dus telkens schuiven de reeds geplakte artikelen een plekje op naar beneden. Niks wordt dus overschreven. Maar het liefst heb ik dat de meest recent geplakte rij onderaan het bestand wordt geplakt. Dus bij de eerstvolgende lege rij in tabel 1.
Voer in Google eens in: "Excel vba laatste rij" en je vindt tientallen websites waarin wordt uitgelegd hoe je de laatste rij vindt. De eerste lege rij na de laatste rij is dan: Laatste rij + 1 .

Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 03-10 17:25

heuveltje

KoelkastFilosoof

https://www.rondebruin.nl/win/s9/win005.htm

Die pagina's waren voor mij de intree in vba geklooi. Redelijk op basis niveau uitgelegd.

Let wel dat Excel af en toe wat vaag doet met de definitie van "laatste regel" als er ooit tabellen zijn gecopy- en paste.

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • Chrissyvh
  • Registratie: Oktober 2022
  • Laatst online: 03-11-2022
dix-neuf schreef op dinsdag 11 oktober 2022 @ 13:08:
[...]

Voer in Google eens in: "Excel vba laatste rij" en je vindt tientallen websites waarin wordt uitgelegd hoe je de laatste rij vindt. De eerste lege rij na de laatste rij is dan: Laatste rij + 1 .
Ah thanks! Met Google moet ik er inderdaad wel uitkomen, nu ik precies weet wat ik moet zoeken :)

Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Nog enkele opmerkingen bij je macro:
Dezelfde selectie (=de rij waarheen je gekopieerd hebt) laat je via de macro 2 x uitlijnen: 1 x rechts en 1 x links. Excel past dan uiteraard de uitlijning toe die in de macro het laatst staat (= linkse uitlijning). Deze regels kun je dus laten vervallen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection

Maar uitlijning en omlijning van cellen (borders) kun je ook vooraf handmatig instellen en dan hoef je die helemaal niet in de macro op te nemen (die instellen met een macro werkt trouwens ook nogal vertragend). Wil je de (linkse) uitlijning toch in de macro handhaven, dan kun je je beperken tot deze regel:
code:
1
Selection.HorizontalAlignment = xlleft

De andere gegevens waarvan je instellingen vermeldt:
VerticalAlignment, WrapText, Orientation, AddIndent, IndentLevel, ShrinkToFit, ReadingOrder, en MergeCells
zijn standaardinstellingen in Excel die automatisch al worden toegepast en die hoef je dus niet afzonderlijk te specificeren. Hetzelfde geldt voor onderstaande regels, die je ook kunt verwijderen:
code:
1
2
3
4
5
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
en
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

In de vier laatste regels van je macro doe je 2 verschillende selecties, daar zul je alleen de laatste van zien, de eerste kun je daarom weglaten.
En tot slot: om met vba bewerkingen op cellen uit te voeren is het niet nodig om die cellen eerst te selecteren.

[ Voor 11% gewijzigd door dix-neuf op 11-10-2022 14:42 ]