Range selecteren met Userform tot aan laatst gevulde rij/cell

  • Onderwerp starter Onderwerp starter globe
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

globe

Verenigingslid
Lid geworden
18 mrt 2001
Berichten
3.616
ik gebruik de volgende code om een kolom als range in te stellen die de aanduiding "datum" moet hebben.

Code:
Dim Specifiedrange As Range
Set Specifiedrange = Application.InputBox("Selecteer kolom met Leverdatum", Type:=8)
Specifiedrange.Name = "Datum"

Vervolgens komt er een stuk overige code met een hoop berekeningen en acties achteraan.
Dit maakt de macro enorm traag. Nu heb ik gemerkt wanneer ik de kolom selecteer tot en met de laatst gebruikte rij/cel het aanzienlijk sneller gaat.

Wat moet ik toevoegen aan mijn range om de kolom vanaf rij 1 tot en met de laatst gevulde rij te selecteren.

De geselecteerde range moet "Datum" blijven heten.

Ik vermoed iets met xlDown?

dank!
 
Bvb

Code:
Sub jec()
 Dim a
 On Error Resume Next
 a = Application.InputBox("Selecteer kolom met Leverdatum", Type:=8).Address
 If IsEmpty(a) Then Exit Sub
 Range(Split(a, "$")(1) & 1, Range(Split(a, "$")(1) & Rows.Count).End(xlUp)).Name = "Datum"
End Sub
 
Laatst bewerkt:
Code:
Sheet1.usedrange.columns(1).name="datum"
of
Code:
Sheet1.cells(1).currentregion.columns(1).name="datum"
 
Het lijkt of de kolom variabel moet zijn, bepaald door de gebruiker.
 
Dank voor de oplossingen. Ik ga er mee aan de gang. Inderdaad moet de gebruiker dmv een input box de gewenste kolom aangeven.
 
Bvb

Code:
Sub jec()
 Dim a
 On Error Resume Next
 a = Application.InputBox("Selecteer kolom met Leverdatum", Type:=8).Address
 If IsEmpty(a) Then Exit Sub
 Range(Split(a, "$")(1) & 1, Range(Split(a, "$")(1) & Rows.Count).End(xlUp)).Name = "Datum"
End Sub

Helaas werkt deze oplossing niet.

Ik kan keurig een range (kolom) selecteren maar de selectie wordt niet aangepast naar de laatste cel.
Het split gedeelte schijnt niet te werken of selecteer de range niet goed?

Als ik een messagebox toevoeg aan de macro wordt als actieve range de cel weergegeven waar ik met mijn cursor in stond voordat ik de macro activeerde:

Code:
 Dim a
 On Error Resume Next
 a = Application.InputBox("Selecteer kolom met Leverdatum", Type:=8).Address
 If IsEmpty(a) Then Exit Sub
 Range(Split(a, "$")(1) & 1, Range(Split(a, "$")(1) & Rows.Count).End(xlUp)).Name = "Datum"
 
 Range("Datum").Select

 
  MsgBox Application.Selection.Address, vbInformation, "selected range"

In de voorbeeld file selecteer ik kolom $B:$B
 

Bijlagen

Een kolom kiezen kan bijvoorbeeld zo:
Code:
Sub SelecteerKolom()
    Set r = Range(Application.InputBox("Selecteer een cel in de gewenste kolom", Type:=8).Address)
    MsgBox "Kolom is: " & r.Column, , "Gekozen kolom"
End Sub
 
Een kolom kiezen kan bijvoorbeeld zo:
Code:
Sub SelecteerKolom()
    Set r = Range(Application.InputBox("Selecteer een cel in de gewenste kolom", Type:=8).Address)
    MsgBox "Kolom is: " & r.Column, , "Gekozen kolom"
End Sub

Dank Edmoor voor je reactie. Een gehele kolom selecteren weet ik hoe dat werkt. Dat werkt prima. Echter wordt mijn data iedere dag circa 2500 regels langer. Ik moet een kolom selcteren vanaf rij 1 tot aan de laatst gebruikte rij.
Dit is dus een variabele. De gehele kolom selecteren resulteert in te veel data die verwerkt moet worden.

In mijn voorbeeld wil ik dus kolom B selecteren, maar de range moet B1:B5 worden.
 
Laatst bewerkt:
Simpel:
Code:
Sub SelecteerKolom()
    Set r = Range(Application.InputBox("Selecteer een cel in de gewenste kolom", Type:=8).Address)
    MsgBox "Kolom is: " & r.Column & vbCrLf & "Laatste regl is: " & r.End(xlDown).Row, , "Gekozen kolom"
End Sub
 
Simpel:
Code:
Sub SelecteerKolom()
    Set r = Range(Application.InputBox("Selecteer een cel in de gewenste kolom", Type:=8).Address)
    MsgBox "Kolom is: " & r.Column & vbCrLf & "Laatste regl is: " & r.End(xlDown).Row, , "Gekozen kolom"
End Sub

Top, dit geeft idd de laatste gebruikte rij/ cel weer.

Hoe kan ik een range van maken met naam "Datum" vanaf de eerste cel in de kolom tot aan de laatst gebruikte cel?

DIe msgBox is niet noodzakelijk, dat is meer een check voor mij om te kijken of de selectie goed gaat.
 
Zo bedoel je?
Code:
Sub SelecteerKolom()
    Set r = Range(Application.InputBox("Selecteer een cel in de gewenste kolom", Type:=8).Address)
    Rlinks = Replace(Split(r.Address, "$")(1), ":", "")
    Rrechts = r.End(xlDown).Row
    Range(Rlinks & "1:" & Rlinks & Rrechts).Name = "Datum"
End Sub
 
Zo bedoel je?
Code:
Sub SelecteerKolom()
    Set r = Range(Application.InputBox("Selecteer een cel in de gewenste kolom", Type:=8).Address)
    Rlinks = Replace(Split(r.Address, "$")(1), ":", "")
    Rrechts = r.End(xlDown).Row
    Range(Rlinks & "1:" & Rlinks & Rrechts).Name = "Datum"
End Sub


wow! Dat dus.

Waanzinnig bedankt, hier kan ik wel wat mee. Nu eens kijken of de rest van min script werkt.

Ik vrees dat ik me morgen weer meld.
 
Prima :)
Als je dan weer hierop reageert doe dat dan middels de Reageer op bericht knop in plaats van de Quote knop.
 
Zou je ook ipv een inputbox te gebruiken, kunnen zoeken naar een bepaalde waarde in de bovenste cel van een rij, de header?

In mijn geval de waarde 'leverdatum' . Dat scheelt de gebruiker weer een handeling en dus minder kans op fouten.
 
Tuurlijk:
Code:
Sub ZetDatumBereik()
    Set r = Range("A1:XFD1").Find("leverdatum", , , xlWhole)
    Range(r.Address & ":" & Replace(r.Address, "1", r.End(xlDown).Row)).Name = "Datum"
End Sub
 
Heerlijk dit! Was ik maar zo handig als jullie hier.

Ook dit werkt als een malle. Dit gaat me dagelijks veel tijd en fouten besparen.

Hartelijk dank allen voor het meedenken.
 
Dit kan ook zó:

Code:
Sub M_snb()
   Blad1.Rows(1).Find("leverdatum").EntireColumn.SpecialCells(2).Name = "datum"
End Sub

Vermijd overbodige variabelen in VBA.
 
Laatst bewerkt:
Het gaat vele malen simpeler door gebruik te maken van een tabel (listobject).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan