laatste rij tabel, lege cellen vullen

Status
Niet open voor verdere reacties.

Hanzsel

Gebruiker
Lid geworden
1 mei 2013
Berichten
7
Ik heb een tabel automatisch gevuld wordt met gegevens.
Door Ebkac worden niet altijd alle cellen gevuld.
Dit wil ik middels VBA doen.

Mijn probleem is dat als ik bij de laatste rij een selectie naar links doe, VBA stopt bij de eerste lege cel.
Nu is het bereik altijd hetzelfde (kolom B : AK)
Er zijn een aantal cellen die altijd ingevuld zullen zijn, dus daar vandaan kan ik bepalen welke rij er geselecteerd moet worden.

Hoe vertel ik VBA dat de laatst gevonden "gevulde" cel in een kolom de basis is voor de selectie van B tot AK?
 
Bv.
Code:
lRow = Sheets("Blad1").range("A" & rows.count).end(xlup).row
geeft laatsgevulde cel in kolom A.
 
Warme bakkertje,
dat klopt maar dat is mijn probleem niet.
mijn tabel loopt van B tot AK in rij X, waarbij X iedere keer een rij opschuift.
Gegevens uit een ander blad worden in de tabel gekopieerd.
Ik wil de eventuele gaten die ondanks voorzorgs maatregelen toch ontstaan automatisch vullen.
Dit kan met "Selection.SpecialCells(xlCellTypeBlanks).Select" .
Nu kunnen er echter meerdere lege velden zijn in de tabel.
Wanneer dit het geval is stopt VBA normaal gesproken zodra de tabel "stopt", en dit is volgens VBA als er een lege cel gevonden wordt.

Het lukt me om VBA in een kolom de laatste cel te laten vinden en van die laatste cel moet het dus het bereik B tot en met AK selecteren om vervolgens "Selection.SpecialCells(xlCellTypeBlanks).Select" uit te voeren waardoor ik alle lege cellen in een keer kan vullen.
Dit zorgt er voor dat de volgende keer dat VBA weer een regel vult alles op de juiste plaats komt en niet een regel hoger in gevuld wordt.

Dus van regel X wil ik bereik B tot en met AK selecteren.
hoe geef ik VBA die opdracht?
 
Laatst bewerkt:
Dan zal je eerst moeten zorgen dat kolom AK volledig gevuld is of per regel een controle uitvoeren of deze cel ingevuld is, anders gaat het je nooit lukken met specialcells omdat deze altijd stopt bij de laatst gevulde cel in een regel.
 
Niet mee eens,
ik weet dat het kan.
Als je een range selecteert en dan "Selection.SpecialCells(xlCellTypeBlanks).Select" uitvoert worden alle legen cellen in één keer van een tekst voorzien. Heb ik al werkend gehad maar voor een vast bereik.

Ik kom er alleen zelf niet uit.
Je kunt vba vertellen een bepaald bereik te selecteren
Waarbij er maar één variabele is die benoemd moet worden.

Ik denk iets in de buurt van
in een kolom het rijnummer hebben staan
laatste cel vinden
rij nummer uitlezen (X)

select range (x:B;x:AK) en dan de rest.

er zal in de sub iets moeten staan als dim x as integer
en ergens moet neoemd worden dat x het uitgelezen rijnummer moet zijn.
 
Laatst bewerkt:
Wat is er op tegen dat er lege cellen in een bereik zitten? Zolang alle velden maar op de juiste plek worden ingevuld, lijkt mij dat alleen maar prima! Zinloze data is net zo nuttig (wellicht zelfs eerder een sta-in-de-weg) als lege cellen. Het is non-informatie waarmee je dus je database moedwillig vervuilt. Ik zou dat bepaald niet willen! En volgens mij is dat ook helemaal jouw probleem niet...
Dit zorgt er voor dat de volgende keer dat VBA weer een regel vult alles op de juiste plaats komt en niet een regel hoger in gevuld wordt.

Wat jij wilt is er voor zorgen dat je in ieder geval verder importeert onder de laatst ingevulde rij. En dat is simpel op te vragen door de laatste rij te bepalen. En dan op de volgende verder te gaan.
Code:
Dim rng As Range
     Set rng = ActiveSheet.Cells(2).CurrentRegion
     iRij = Rng.Rows.Count +1
En die waarde gebruik je om je startpositie voor het plakken te bepalen.
 
Laatst bewerkt:
Toch zo simpel als het groot is.
Je weet in welke cel je tabel begint, je weet hoe je de laatsgevulde cel kan vinden in je tabel
Zorg er gewoon voor dat de TopLeftcel en de BottomRightcel van je tabel gevuld zijn en Specialcells doet de rest.
Code:
Sub tst()
    Set Rng = Cells(2, 2).CurrentRegion
    lRow = Rng.Rows.Count
    If Cells(lRow + 1, 37) = vbNullString Then Cells(lRow + 1, 37).Value = "XX"
    Cells(2, 2).Resize(lRow, 36).SpecialCells(4).Value = 0
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan