veit > microsoft.public.* > microsoft.public.office.excel

 #1  
24.10.2006, 00:08
William
Hallo Excellers,

Ik wil een bladnaam geven, van A1 en A5 en de laatste cel met waarde,
A5:A32, maar als A32 leeg is dan moet dit A31 worden, of A30, etc.

ActiveSheet.Name = ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
"Wat moet hieronder staan, om de cel die wel een waarde heeft ? "
ActiveSheet.Range("A32").Value

vriendelijke groeten,
william
 #2  
24.10.2006, 11:17
maurrieske
William er zijn enkele opties.
1 er is zoiets als specialcells. Deze werkt echter niet altijd zoals
gewenst. Maar wel de moeite waard om in de help te bekijken.
2 indien er sprake is van een aaneengesloten gevuld bereik dan kun je van
boven naar beneden gaan naar de laatst gevulde cel met de opdracht. Nadeel
is dat er sprake moet zijn van een aaneengesloten reeks vanaf de cel waarin
je begint naar beneden te gaan (in het voorbeeld A1)
3 indien er geen waardes meer onder A32 voorkomen kun je ook van onderen
naar boven gaan met de offset. Nadeel is dat er sprake moet zijn van een
aaneengesloten lege reeks vanaf de cel waarin je begint naar boven te gaan
(in het voorbeeld A65536)
4 een lus opdracht die begint in A32 om de rij met een waarde in kolom A te
bepalen. Je begint in A32 en gaat verder naar boven tot er een waarde staat.
Zodra er een waarde staat zal het rijnummer van de cel in een variabele
gebruikt worden. Nadeel is dat je hard programmeert vanaf welke cel je wil
controleren. Nu is dat A32, maar indien dat in de toekomst zal wijzigen moet
je dat ook in de code aanpassen.
5 een lusopdracht die vanaf een bepaalde rij beoordeelt of er een waarde
staat in de cel. Het rij nummer van de laatst gevulde cel zal als variabele
gebuikt worden. Nadeel is dat je hard programmeert vanaf welke cel je
controleert en tot welke cel je wil controleren. Nu is dat vanaf A1 tot A32,
maar indien dat in de toekomst zal wijzigen moet je dat ook in de code
aanpassen.

1
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A" & Range("A:A").SpecialCells(xlCellTypeLastCell)).Val ue

2
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A1").Offset.End(xlDown).Value

3
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A65536").Offset.End(xlUp).Value

4
Range("A32").Select
rij = 32
If ActiveCell = "" Then
Do Until ActiveCell <> ""
ActiveCell.Offset(-1, 0).Select
rij = ActiveCell.Row
Loop
End If
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A" & rij).Value

5
For i = 1 To 32 Step 1
If Range("A" & i) <> "" Then rij = i
Next
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A" & rij).Value

Zoek er maar een uit die voor jou het beste uitkomt.

Maurrieske

"William" <william> schreef in bericht
news:3736
[..]
 #3  
24.10.2006, 13:55
William
Hallo Maurrieske,

Hartelijk bedankt voor je goede uitleg.
Ik ga een macro die er het beste bij past proberen.

vriendelijke groeten,
william
 #4  
24.10.2006, 16:15
williamtell
Hallo Maurrieske,

Ik heb de macro's aangebracht, maar maakt het uit als er een formule in
staat?
"=ALS(OF(A31=0;A31+1>25);0;A31+1)"
dit is dan 0, A31 idem, A30 idem, A29 wordt 25, die is dan zichtbaar,dus de
macro ziet volgens mij een formule, dus geeft dan ook de laatste in dit
geval A29 niet weer.
Weet jij hier nog wat op?

vriendelijke groeten,
william

"maurrieske" <maurrieske> schreef in bericht
news:a748
[..]
 #5  
24.10.2006, 17:35
maurrieske
In het geval er een formule in de cel staat zal deze met de offset functie
niet werken. Er is immers geen sprake meer van een lege cel.
Ook het type xllastcell (methode 1) valt af omdat er geen sprake meer is van
een laatst gevulde cel. Er staan immers formules in. Blijven methode 4 en 5
over. Zij het met een aanpassing.

4
Range("A32").Select
rij = 32
If ActiveCell.value>0 Then
Do Until ActiveCell <> ""
ActiveCell.Offset(-1, 0).Select
rij = ActiveCell.Row
Loop
End If
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A" & rij).Value

5
For i = 1 To 32 Step 1
If Range("A" & i).value > 0 Then rij = i
Next
ActiveSheet.Name =ActiveSheet.Range("A1").Value & _
ActiveSheet.Range("A5").Value & "-" & _
Range("A" & rij).Value

Een andere mogelijkheid is om de formule aan te passen.
"=ALS(OF(A31=0;A31+1>25);0;A31+1)"
wordt dan
"=ALS(OF(A31="";A31+1>25);"";A31+1)"
Het resultaat zal nu niet meer 0 zijn maar een ogenschijnlijk lege cel. De
cel is echter niet leeg omdat er een formule in staat.
In dit geval werken de oude methode 4 en 5 wel. maar je hebt nu beide
soorten oplossingen.

Maurrieske

"williamtell" <knw.tilder> schreef in bericht
news:a748
[..]
 #6  
24.10.2006, 18:04
William
Hallo Maurrieske,

Wederom mijn hartelijke dank, ik ga het proberen.

vriendelijke groeten,
william
 #7  
24.10.2006, 18:11
William
Hallo Maurrieske,

Bedankt,
Macro 5 doet het precies zoals ik graag wilde.

vriendelijke groeten,
william
Soortgelijke onderwerpen