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

Automatische rijen tabel

Status
Niet open voor verdere reacties.

Micheltje13

Gebruiker
Lid geworden
28 jan 2011
Berichten
132
Hallo,

Ik heb een vraag over tabellen in excel. Ik wil het namelijk zo:

in 1 excel tabblad wil ik graag een tabel hebben die de rijen automatisch aanpast. Dat betekent dat hij begint met 1 rij en wanneer deze is ingevuld de volgende rij erbij komt. Zijn we dan op 6 rijen en hoeft er maar 1 rij ingevuld te worden dan moeten er 5 rijen verdwijnen. Is deze volautomatische vorm van een tabel mogelijk?

Ik hoor het graag!
 
Nou nee, dat is nogal een specifieke behoefte.
Waarom vind je dat een "volautomatische tabel"?
En waarom zou je verwachten dat zoiets tot de standaard mogelijkheden zou behoren?
Bij tabelopties ben ik nog geen vinkje tegengekomen "gooi 5 rijen weg zodra er 6 rijen zijn".
Wat bedoel je eigenlijk precies met "zijn we dan op 6 rijen en hoeft er naar 1 rij ingevuld te worden"?
Ik ben erg benieuwd naar de achtergronden van je behoefte.
 
Marcel, begrijp ik wellicht niet helemaal helder uitgelegd.

Ik noem het een volautomatische tabel omdat ik geen idee heb hoe ik het anders moet noemen. Het gaat er in principe om dat de tabel zich ten alle tijden aanpast aan de input. De ideale situatie lijkt mij dus dat je ten alle tijden met 1 rij begint en zodra deze rij gevuld is de volgende rij automatisch wordt toegevoegd. Vervolgens is er een input blad waar mijn collega's de producten kunnen invoeren en een output blad voor een representatieve layout waarin niks te wijzigen is. Opzich is het natuurlijk niet nodig dat er ook automatisch rijen verwijderd worden wanneer je altijd met 1 rij begint.

Ik heb een bestand gevonden die telkens een rij toevoegt wanneer de onderste rij gevuld is. Deze heb ik toegevoegd. Echter kan ik er bij dit bestand niet achter komen waar ik de range kan wijzigen. Het begin van dit document is verder goed, de volgende vraag blijft dan hoe kunnen we een verwijzing creëren vanuit het ene tabblad naar het andere die automatisch het aantal ingevulde rijen pakt. En niet meer niet minder.

Bekijk bijlage insertROW.xls
 
Het toevoegen van rijen gebeurt vanzelf in tabellen als je vanuit de laatste cel in de tabel een tab geeft, of als je direct onder de tabel gaat typen (mits de tabel geen totaalrij heeft).

Ik begrijp niet wat je bedoelt met "altijd met rij 1 beginnen", je begint toch waar je gebleven bent, of er moet sprake zijn van een template?
In de bijlage heb ik een voorbeeld van een tabel met een totaalrij en op blad 'Output' 3 manieren om de totalen te bepalen; alle 3 passen zich automatisch aan als rijen aan de tabel worden toegevoegd, dan wel er uit worden verwijderd.

Let op: een en ander is niet compatibel met Excel 97-2003, dus hopelijk heb je een Excel versie waarin dit wel werkt.
 

Bijlagen

Het moet inderdaad een template worden sorry voor de onduidelijkheid.

Daarnaast nog wat meer achtergrond informatie wellicht had ik die eerder moeten geven. In de input tabel gaat het om een koppeling met exact waarin de artikelnummers worden ingegeven en vervolgens alles ingevuld wordt. In de output komt die tabel ongeveer hetzelfde te staan maar dan puur en alleen tekst die beveiligd is zo heb je een input + output tab. De output hoeft in wezen niet anders te zijn dan de input qua uiterlijk.

Je bestand is al van veel hulp geweest het enige wat ik nu dus nog wil is dat de outputsheet de exacte tabel laat zien als ie 2 rijen of al is ie 6 rijen. Is dit ook nog mogelijk?
 
Zoiets als in het gele vlak in de bijlage? De formule in G3 is doorgekopieerd naar H24.

Edit: als eerste argument van de INDEX functie had ik Table1 ingegeven, maar bij het opslaan in Excel 97-2003 is daar een bereik van gemaakt.
 

Bijlagen

Laatst bewerkt:
Opzich is dit prima alleen staan er nu veel te veel rijen, er moeten echt evenveel rijen staan als ingegeven in de tabel. Is dit mogelijk?
 
Je bedoelt deze code:

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Range("table1"), Target) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
Sheet3.Range("A1").CurrentRegion.ClearContents
Range("Table1[#All]").Copy
Sheet3.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True

End Sub

?

Welke dingen moet ik precies aanpassen? Ik krijg nu namelijk: Methode Range van object _Worksheet mislukt. Voor de rest werkt het wel zoals ik wil!
 
Helemaal top! Er is nog 1 ding wat moet veranderen. Bij het output tabel voeg hij geen rijen in maar pakt hij gewoon de vrije rijen. Onder de tabel staat nog informatie. Hoe kan ik ervoor zorgen dat dit er altijd 1 a 2 regels onder blijft staan?
 
Even zitten prutsen als beginnend VBA-er met het volgende - volledige herziene - resultaat
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range
    If Intersect(Range("table1"), Target) Is Nothing Then Exit Sub
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    Sheet3.Range("A1:A" & Sheet3.Range("ExtraInfo").Row - 2).EntireRow.Delete
    
    Set rng = Range("Table1[#All]")
    Sheet3.Range("A1:A" & rng.Rows.Count).EntireRow.Insert
    Sheet3.Range("A1").Resize(rng.Rows.Count, rng.Columns.Count) = rng.Value
    
    Application.CutCopyMode = False
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
    
End Sub

Let op dat ik de eerste cel met extra informatie onder de output tabel (nu Output!A9) heb gemarkeerd met gedefinieerde naam ExtraInfo.
De vorige code werkte niet goed als je in de tabel een rij zou tussenvoegen. omdat dan de "CurrentRegion" maar loopt tot aan de tussengevoegde regel en de overige regels dan niet verwijderd zouden worden.
 

Bijlagen

Ik krijg hem nu niet meer aan de praat. Er gebeurt niks meer zodra ik mijn table aanpas. Zou je mee kunnen kijken via teamviewer?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range
If Intersect(Range("table1"), Target) Is Nothing Then Exit Sub

Application.ScreenUpdating = False
Application.EnableEvents = False

Sheet3.Range("A1:A" & Sheet3.Range("ExtraInfo").Row - 2).EntireRow.Delete

Set rng = Range("Table1[#All]")
Sheet3.Range("A1:A" & rng.Rows.Count).EntireRow.Insert
Sheet3.Range("A1").Resize(rng.Rows.Count, rng.Columns.Count) = rng.Value

Application.CutCopyMode = False
Application.EnableEvents = True
Application.ScreenUpdating = True


End Sub
 
Kun je zelf niet een beetje troubleshooten met msgbox, debug.print en wat dies meer zij?
Bijvoorbeeld een msgbox na If Intersect(Range("table1"), Target) Is Nothing Then Exit Sub om te kijken of de code wordt uitgevoerd.
Mijn eerste vermoeden zou zijn dat je de naam ExtraInfo niet hebt gedefinieerd.

Als je dit soort dingen wilt doen, dan moet je ook in staat zijn om te begrijpen wat er gebeurt, anders kun je het maar beter niet doen of anders een softwarebureau inschakelen.
 
Je hebt gelijk, heb het geprobeerd error zat inderdaad in ExtraInfo. Nu zit ik echter met 1 probleem. De tabel bevindt zich namelijk niet op A1 maar op A21 en er staat informatie boven. Wanneer ik informatie aan de tabel toevoeg verdwijnt alle info boven de tabel..
 
Probeer eens alle A1 te wijzigen in A21. Ik denk dat je dan een heel eind komt. Uiteraard in een kopiebestand uitproberen.

Edit: deze Sheet3.Range("A1:A" & rng.Rows.Count).EntireRow.Insert
moet denk ik worden: Sheet3.Range("A21:A" & 20 + rng.Rows.Count).EntireRow.Insert
 
Laatst bewerkt:
Fantastisch het werkt allemaal! 1 laatste vraag. Is er een simpele knop te maken op de input sheet waar hij de output sheet vanaf A1 tot een variabele cel voor het gemak noemen we hem "Einde" naar het klembord kopieert zodat deze direct in word of outlook oid geplakt kan worden?
 
Nou ik weet inmiddels hoe ik een copy knop maken echter kan ik er niet uit komen hoe ik bijvoorbeeld cell A1 pak en de cell "Einde" ik zou simpelweg denken onderstaand:

Sub Macro6()
'
' Macro6 Macro
'

'
Sheets("outputtabel").Select
Range("A1:Einde").Select
Selection.Copy
End Sub

Echter werkt dit dus niet..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan