Invoeren nieuwe regel onderaan tabel met naambereik met behoud van opmaak

Status
Niet open voor verdere reacties.

Vieri

Gebruiker
Lid geworden
12 jan 2013
Berichten
64
Hallo Excel wizzards,

zie hieronder mijn macro om een lege regel in te voeren onderaan naambereik 'Voeding' in kolom A

Code:
Sub AddRow()
With Range("Voeding")
.Rows(.Rows.Count + 1).EntireRow.Insert
.Resize(.Rows.Count + 1).Name = .Name.Name

End With
End Sub

Hierdoor wordt er een lege regel ingevoegd onderaan het naambereik 'Voeding' en zorgt ervoor dat de nieuwe lege regel ook nog binnen het naambereik valt.

Ik krijg het alleen niet voor elkaar om dezelfde opmaak via .FillDown mee te nemen. De kolommen in gebruik zijn A t/m T, misschien dat dit mee genomen dient te worden in de code?

Is deze actie ook om te keren? (dus de laatste regel onderaan het naambereik 'Voeding' te verwijderen)

Alvast bedankt!!
 
Laatst bewerkt:
Beste,
Betreft volgende
om een lege regel in te voeren onderaan tabel
met je code kan ik zien dat je niet met een tabel werkt, maar met een naambereik.
Ofwel spreek je over een tabel of over een naambereik.
Maak er een echte tabel van of post een vbtje.
 
Het is inderdaad een naambereik.

Ik werk aan een voorbeeldje. Bedankt voor je reply in het Excel forum. Heb de moderator gevraagd mijn post daar te verwijderen. Per ongeluk verkeerd geplaatst.
 
Zie ook het antwoord van Vena in uw vorig postje, volgens mij is het gewoon dezelfde opmerking.
 
Wat raar?! Ik kan het wel downloaden.
Waarschijnlijk omdat je van je eigen pc komt, maar deze werkt wel:thumb:
 
Alle bestandjes zijn gewoon te openen. Gebruik geen samengevoegde cellen en maak gebruik van een tabel

Rij toevoegen
Code:
Sub AddRow()
  Blad1.ListObjects(1).ListRows.Add Blad1.ListObjects(1).ListRows.Count + 1
End Sub
verwijderen
Code:
Sub VenA()
  Blad1.ListObjects(1).ListRows(Blad1.ListObjects(1).ListRows.Count).Delete
End Sub

Edit
Toevoegen werkt ook zo
Code:
Sub AddRow()
  Blad1.ListObjects(1).ListRows.Add
End Sub
 

Bijlagen

  • voorbeeld voeding.xlsb
    15,4 KB · Weergaven: 57
Laatst bewerkt:
Bedankt voor jouw reactie! Helaas blijven de samengevoegde cellen zoals ze zijn. Originele document is een lay out van een klant die ik niet aan kan passen.

Is er nog een andere optie misschien?
 
Misschien is het handig dat je het hele proces even uitlegt.
Natuurlijk zijn er diverse opties
-Je kan de klant vragen om geen samengevoegde cellen te gebruiken;
-Je kan een rij kopiëren en dan alleen de opmaak plakken;
-je kan een rij invoegen en de opmaak instellen;
-Etc.
Even een macro opnemen kan een handig hulpmiddel zijn.

Code:
Sub AddRow()
With Range("Voeding")
  .Rows(.Rows.Count + 1).EntireRow.Insert
  .Cells(.Rows.Count, 1).Offset(1, 2).Resize(1, 2).Merge
  .Cells(.Rows.Count, 1).Offset(1).Resize(, 4).Borders.LineStyle = 1
  .Resize(.Rows.Count + 1).Name = .Name.Name
End With
End Sub
 
VenA,

Super bedankt voor jouw input!! Ik zal vanmiddag naar jouw oplossingen kijken.

De klant wil geen aanpassingen, dus die samengestelde cellen moeten blijven.

Mijn initiële code werkt mijns inziens, maar ik mis de opmaak die meegekopieerd moet worden.

Ik werk met diverse naambereiken, omdat deze gelinkt zijn aan een labelprogramma.

De uiteindelijke gebruiker heeft diverse naambereiken tot zijn beschikking (in mijn voorbeeld heb ik mij beperkt tot alleen 'Voeding') en zou via een + knop en - knop regels toe moeten kunnen voegen of verwijderen onderaan ieder naambereik (met behoud van opmaak, dus ook samengevoegde cellen). Hierdoor verschuiven ook de andere naambereiken welke zich onder naambereik 'Voeding' bevinden. Elk naambereik krijgt dus zn eigen + en - knop, waarbij iedere macro verwijst naar het betreffende naambereik.

Ik vind het dus lastig om dit op te nemen, omdat opnemen alleen betrekking heeft op de rijen waar ik de acties uitvoer.
 
Top,

het werkt. Ik heb de macro wat aangepast om te kijken hoe de offset werkt met meerdere samengestelde cellen in 1 rij

Code:
Sub AddRow()
With Range("Voeding")
 .Rows(.Rows.Count + 1).EntireRow.Insert
  .Cells(.Rows.Count, 1).Offset(1, 3).Resize(1, 4).Merge
  .Cells(.Rows.Count, 1).Offset(1, 9).Resize(1, 3).Merge
  .Cells(.Rows.Count, 1).Offset(1, 13).Resize(1, 4).Merge
  .Cells(.Rows.Count, 1).Offset(1).Resize(, 20).Borders.LineStyle = 1
  .Resize(.Rows.Count + 1).Name = .Name.Name
End With
End Sub

Daarnaast heb ik hieruit een macro gemaakt voor het verwijderen van de onderste rij van het naambereik en ook het hernoemen van het naambereik (omdat de onderste rij gedelete is

Code:
Sub DelRow()
With Range("Voeding")
 .Rows(.Rows.Count).EntireRow.Delete
  .Resize(.Rows.Count).Name = .Name.Name
End With
End Sub

Duizendmaal dank. Ik ben er op deze manier wel uit, tenzij iemand nog een verbetering heeft voor de door mij genoemde macro's :thumb:
 
Denk je dat je het nét eindelijk voor elkaar hebt, loop je toch weer tegen iets aan. De laatste cel heeft aan de rechterzijde een dikke lijn, maar die kopieert ie niet meer omdat de linestyle op 1 staat. Is daar nog een workaround voor? Ik heb eigenlijk hetzelfde resultaat als een filldown actie nodig.

randje.JPG
 
Ow,het is me zowaar gelukt. Het ging om de 20e cel, dus heb de offset op 19 gezet en gecombineerd met .FillDown
Code:
  .Cells(.Rows.Count, 1).Offset(1, 19).FillDown

Het zal vast niet de 'schoonste' manier zijn, maar nogmaals, als iemand me kan verbeteren, graag :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan