De eerste lege cel vinden

Status
Niet open voor verdere reacties.

samui

Verenigingslid
Lid geworden
26 mei 2012
Berichten
207
Onderstaande macro: Application.Run mailen" verstuurd 2 tabbladen door er een PDF van te maken en vervolgens te mailen naar een mailadres.
Daarna komt de macro terug in het tabblad Ds waar vervolgens 3 stappen naar rechts gedaan wordt.
Vanaf deze cel: Hoe vind ik nu de eerst volgende lege cel naar beneden kijkend?
Ik kom iedere keer naar het zoeken op internet en hier op de laatste cel van mijn sheet uit. 65000 zoveel.

Ik kom uit met de 3 stappen naar rechts op een willekeurige cel in kolom E en een cel of 10 naar beneden in kolom E is er een lege cel. Ik wil daar komen te staan met de cursor.

Na de macro wederom uitgevoerd te hebben wil ik dan weer op de eerstvolgende lege cel naar beneden terecht komen. Deze is dan weer x cellen lager


Sub pre()
ActiveSheet.Unprotect
Sheets(Array("FACT", "Bever")).Select
Application.Run mailen"
Sheets("Ds").Select
Selection.Offset(0, 3).select
?? ?? ??
End Sub



Alvast dank weer voor jullie hulp

FrankBekijk bijlage 226939Bekijk bijlage 226939
 
Laatst bewerkt:
De laatst gebruikte regel in de actieve kolom kun je als volgt ophalen:
Code:
    Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, ActiveCell.Column).End(xlUp).Row
    End With

De eerst volgende lege cel in die kolom is dan op dat regelnummer +1
 
Laatst bewerkt:
De (.) (punt) voor "rows.count" kan weggelaten worden Ed.
Elk blad heeft namelijk evenveel rijen. ;)

Code:
Dim LastRow As Long
        LastRow = activesheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
 
Ik gebruik altijd dezelfde van Ron De Bruin en die heeft me nog nooit in de steek gelaten. Daar wijk ik dus niet van af ;)
 
Al zegt dat niks over mijn waardering voor jouw bijdragen :)
 
Bedankt Ed, maar je kan ook eens een keer afwijken van het rechte pad.
 
Daar is vaak een afgrond en ik heb hoogtevrees ;)
 
Heren,

Bedankt weer voor jullie snelle reacties. Maare als ik hem er zo achterplak gebeurd er niks.
Toch zijn er lege cellen in kolom E
Het zal de Kerstnevel nog wel zijn bij mij. :o:rolleyes:

Sub pre()
ActiveSheet.Unprotect
Sheets(Array("FACT", "Bever")).Select
Application.Run mailen"
Sheets("Ds").Select
Selection.Offset(0, 3).select
Dim LastRow As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, ActiveCell.Column).End(xlUp).Row
End With
End Sub
 
Nee, zo werkt dat uiteraard niet. Of je nu die van mij of van HSV gebruikt, het enige wat deze doet is de juiste regel terug geven. Vervolgens zal je zelf met die regel moeten doen wat je wilt. Zoals je het nu in elkaar hebt gestoken is ook niet correct:

Code:
Sub pre()
    Dim LastRow As Long

    ActiveSheet.Unprotect
    Sheets(Array("FACT", "Bever")).Select
    Application.Run mailen"
    Sheets("Ds").Select
    Selection.Offset(0, 3).select

    With ActiveSheet
        LastRow = .Cells(.Rows.Count, ActiveCell.Column).End(xlUp).Row
    End With   

    'Hier de code waar je wat met de variabele LastRow wilt doen
End Sub
 
Laatst bewerkt:
Ik heb een kleine bijlage toegevoegd, want het lukt mij niet. Ik kom alleen helemaal onderaan uit in cel E167.
Op het eind van mijn macro sta ik dmv Selection.Offset(0, 3).select in Cel E17 ( mijn macro start ik in B17 )
Hoe komt de cursor dmv van jullie uitleg nou op de eerstvolgende lege cel, E159 in mijn voorbeeld, terecht?

Daarna doe ik weer wat administratie zonder macro's en vervolgens klik ik weer om een macro te draaien, ergens in Bx en vervolgens moet de cursor de eerstvolgende lege cel naar beneden vinden in kolom E. Gezien de huidige positie van de cursor zou de lege cel E161 gevonden moeten worden.
Ik kom dus iedere keer op cel E167 uit omdat hij de 1e lege cel van onderen vind ipv de eerstvolgende lege cel vanaf de positie waar ik sta in kolom E.

Bedankt voor je reacties die komen gaan.

Frank
 
En je voorbeeld? ;)
 
Excel voorbeeld bijlage, Staat helemaal bovenaan bij mijn 1e melding cq vraagstelling
 
Een voorbeeld kun je beter plaatsen in het bericht waarin je aangeeft een voorbeeld te plaatsen. Maar ik heb 'm gevonden :)
 
Ik heb even je code bekeken en sorry, maar dat is zodanig geschreven dat ik echt niet ga lezen waar er iets ingebakken zou moeten worden om je vraag te beantwoorden.
Er wordt hier altijd gehamerd op leesbaar schrijven door middel van inspringpunten op de juiste posities en daar is in je code helemaal niets van terug te vinden omdat alles recht onder elkaar staat.

1029 regels recht onder elkaar.
Niet te lezen dus. Sorry, maar daar doe ik niks mee.

Tip:
Kijk hier eens naar:
https://www.add-ins.com/macro-produ...to-indent-vba-code/how-to-indent-vba-code.htm
 
Laatst bewerkt:
Beste Edmoor,

Ik begrijp je opmerking maar ook weer niet.
Ik snap ook dat het soms niet ingevuld staat zoals dat gewenst is. Daarom zijn we altijd blij met jullie als experts die ons helpen met onze problemen in VBA land.
Boeken brengen ons niet altijd naar de oplossing van een vraag.

Als je jouw oplossing pakt


Sub pre()
Dim LastRow As Long


Selection.Offset(0, 3).select

'vanaf hier is jouw oplossing van mijn vraag maar die plaatst de cursor onderaan mijn laatste invulling ofwel onder GP07
With ActiveSheet
LastRow = .Cells(.Rows.Count, ActiveCell.Column).End(xlUp).Row
End With

'Hier de code waar je wat met de variabele LastRow wilt doen
End Sub



Dan sta ik dus bij Selection.Offset(0, 3).select in cel E17 volgens mijn bijlage.
Van hieruit zou de macro verder moeten gaan de 1e lege cel in kolom E welke in mijn bijlage cel E159 is.
De oplossing die ik aangeboden heb gekregen en getest zet bij mij de cursor iedere keer op cel E167 welke de 1e lege cel onderaan het geheel is terwijl de bedoeling is dat de 1e lege cel vanaf mijn huidige positie is.
Sorry voor het ongemak.
Maar mocht je geen oplossing willen aandragen hoop ik dat er iemand anders het wel nog wilt doen.
In ieder geval toch bedankt voor je eerdere oplossingen.

Frank
 
Ik heb je een tip gegeven voor het oplossen van dat leesbaarheids probleem. Als dat gebeurt is wil ik met alle plezier je code bekijken om een oplossing te bieden voor je initiële vraag.
 
Aha, nu zie ik je probleem. Ik had niet in de gaten dat de private sub meegegaan was. Had er niet bij stilgestaan.
Excuses.
Ik heb de macro even ingekort.:o
Hopelijk kan je hier dan wat mee.
 

Bijlagen

Probeer het eens zo.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Integer
    Dim i As Long

    Application.ScreenUpdating = False
    For x = 5 To 254
        If ActiveSheet.Cells(x, 2).Value = "x" Then
            ActiveSheet.Cells(x, 2).Value = ActiveSheet.Cells(x, 11).Value
            Selection.Offset(0, 3).Select
            For i = Target.Row + 1 To Range("E" & Rows.Count).End(xlUp).Row
                If Cells(i, 5) = "" Then
                    Application.Goto Reference:=ActiveSheet.Cells(i, 5), Scroll:=True
                    Exit For
                End If
            Next i
        End If
    Next x
    Application.ScreenUpdating = True
End Sub

Let ook op het gebruik van de inspringpunten in dit voorbeeld. Maak er tevens een gewoonte van je variabelen te declareren. Als je Application.ScreenUpdating = False gebruikt hebt moet je deze ook weer op True zetten.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan