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

Regel toevoegen met vba

Status
Niet open voor verdere reacties.

Samsung6713

Gebruiker
Lid geworden
24 dec 2019
Berichten
209
Goedeavond,

Ik wil met VBA een regel kunnen toevoegen aan een tabel.
Het is de bedoeling dat er onder activecell een regel wordt toegevoegd, en er alleen een gedeelte (A1:D1) en (F1:H1) uit de regel van activecell word gekopieerd naar de nieuwe regel.

Ik ben aan het stoeien met activeCell insert row, maar kom er niet uit.

Iemand een idee hoe ik dit voor elkaar krijg met activeCell?
 
Code:
Sub a()
ActiveCell.Offset(1).Rows.Insert
End Sub

Regel invoegen
 
Voor de duidelijkheid toch maar een bestandje toegevoegd.

Aan order 23 wil ik een regel toevoegen en de basisgegevens van die order (geel) kopiëren naar die nieuwe regel.
 

Bijlagen

  • helpmij.xlsm
    10,2 KB · Weergaven: 34
Code:
Sub a()
ActiveCell.Offset(1).Rows.Insert
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Copy
Range(Cells(ActiveCell.Row + 1, 1), Cells(ActiveCell.Row + 1, 5)).PasteSpecial
Application.CutCopyMode = False
Range("A1").Select
End Sub
 
Stel dat ik bijvoorbeeld rij 1 tot 3 en 5 tot 7 wil kopiëren. Hoe geef ik dat bereik dan aan met Cells?
 
Code:
Sub a()
ActiveCell.Offset(1).Rows.Insert
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 7)).Copy
Range(Cells(ActiveCell.Row + 1, 1), Cells(ActiveCell.Row + 1, 7)).PasteSpecial
[COLOR="#FF0000"]Cells(ActiveCell.Row, 4).ClearContents[/COLOR]
Application.CutCopyMode = False
Range("A1").Select
End Sub

Dit is een manier
 
Ja dit werkt, maar soms in soms voegt de activeCell.offset(1).Rows.Insert ook een kolom toe aan het begin. Hetzelfde gebeurd bij het verwijderen, dan verdwijnt er een kolom.

Hoe kan dat?
 
Waarschijnlijk komt dat omdat je twee keer of per ongeluk klikt. Na het uitvoeren van de macro wordt A1 geselecteerd. Als je daarna de macro uitvoert komt er een nieuwe regel onder a1
 
Helaas, het is niet door 2 keer of per ongeluk klikken.
In de bijlage het bestandje zoals ik gemaakt heb.
De ene keer werkt het prima, de andere keer komt er steeds een kolom bij.
Ik snap niet hoe het kan
 

Bijlagen

  • testhelpmij1.xlsm
    125,7 KB · Weergaven: 37
Het komt omdat je een tabel gebruikt. Wanneer je de opmaak als tabel uitzet doet hij het wel
 
De tabelopmaak wil ik wel graag behouden.
Het is ook vreemd dat het toevoegen soms wel werkt en soms niet.
Bij het verwijderen werkt het sowieso niet, daar wordt iedere keer een kolom verwijderd.
 
Zo gaat het wel goed. Je moet zelf even kijken welke cel je wil kopiëren en welke niet.

Code:
Sub Orderregel_Toevoegen()
ActiveCell.ListObject.ListRows.Add (Application.ActiveCell.Row + 1)
Range(Cells(ActiveCell.Row, 3), Cells(ActiveCell.Row, 13)).Copy
Range(Cells(ActiveCell.Row + 1, 3), Cells(ActiveCell.Row + 1, 13)).PasteSpecial
Cells(ActiveCell.Row, 9).ClearContents
Application.CutCopyMode = False
End Sub

Gr
JV
 
Laatst bewerkt:
@ J Veer, een tabel kan je gemakkelijkst behandelen zoals het een tabel behoort, dus kan je op vrij makkelijke manier vragen op welke listrow je staat.
Als de tabel straks een beetje verhuist, dan hang je niet en als je niet in de tabel staat, dan weet je dat meteen.
Code:
Sub Orderregel_Toevoegen()

   On Error Resume Next
   If Intersect(ActiveCell, ActiveCell.ListObject.DataBodyRange) Is Nothing Then   'eerst checken of je in een tabel staat
      MsgBox "je staat niet in een tabel !!!", vbCritical
      Exit Sub
   End If
   On Error GoTo 0

   Set lo = ActiveCell.ListObject                'je tabel
   listrownr = ActiveCell.Row - lo.DataBodyRange.Rows(0).Row   'nr van he huidige listrow= huidige rij - rij van de header
   With lo.ListRows.Add(listrownr + 1).Range     'onder huidige listrow nieuwe listrow invoegen en met dat bereik ...
      .Resize(, 11).Value = .Offset(-1).Resize(, 11).Value   'de 1e 11 cellen zijn gelijk aan de rij erboven
      .Cells(1, 7).ClearContents                 'de 7e cel is leeg
   End With

End Sub
 
Deze heb je ook nog @cow18.

Code:
listrownr = ActiveCell.Row - lo.headerrowrange.row
 
ok, nog gemakkelijker
 
@Cow, bedankt voor de aanvulling. :d
 
@Cow: Een tabel kan ook nog leeg zijn, dan is er geen DataBodyRange en krijg je dus foutmeldingen :)
 
Klopt, maar als je bestand door anderen wordt gebruikt dan zullen ze toch de knop gebruiken en dan krijg je telefoontjes dat het "niet werkt". Die krijg je meestal als je niet op de zaak bent :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan