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

Deel van padnaam in cel

Status
Niet open voor verdere reacties.

Haikom

Gebruiker
Lid geworden
2 aug 2011
Berichten
27
Hallo,

In een overzicht verwijs ik naar bepaalde cellen waar informatie staat.
Bijv. Cel A1 = "Platform-naam', Cel A2 = "Build versie"
'Platform-naam' is een lijstje, waar een keuze wordt gemaakt, op basis waarvan verschillende macro's de sheet klaar maken voor dat specifieke platform.

Omdat ik een vaste mappen-structuur gebruik, waarbij de Excelsheet altijd in de laatste map staat, is deze laatste map altijd de Build-versie.

Het zou mooi zijn om in de betreffende cel een formule te gebruiken die alleen het laatste deel van het volledige padnaam toont:

C:\Map1\Map2\Map3\Build_xx zou dan worden: Build_xx

Ik heb verschillende varianten gevonden en geprobeerd maar nog niet 'dummy-proof':
Voor nu gebruik ik de variant 'Bestandsnaam zonder extentie', waarbij de bestandsnaam dus wel eenduidig gebruikt moet worden zodat het buildnummer getoond wordt.

  • Padnaam: =LINKS(CEL("Bestandsnaam");VIND.SPEC("[";CEL("Bestandsnaam");1)-1)
  • Bestandsnaam met extentie: =MIDDEN(CEL("bestandsnaam");VIND.SPEC("[";CEL("bestandsnaam"))+1;VIND.SPEC("]";CEL("bestandsnaam"))-VIND.SPEC("[";CEL("bestandsnaam"))-1)
  • Bestandsnaam zonder extentie: =VERVANG(LINKS(CEL("bestandsnaam";Overzicht_XYZ!A20);VIND.SPEC("]";CEL("bestandsnaam";Overzicht_Email!A20))-6);1;VIND.SPEC("[";CEL("bestandsnaam";Overzicht_XYZ!A20));"")

Is dit mogelijk?
 
Dat gaat heel eenvoudig met een stukje VBA.
Een UDF (User Defined Function) dus.
Plaats het volgende in een module:
Code:
Function LAATSTEMAP(Target As Range) As String
    Map = Split(Target, "\")
    LAATSTEMAP = Map(UBound(Map))
End Function
De functie LAATSTEMAP kan je dan net zo gebruiken als iedere standaard Excel functie.
PHP:
=LAATSTEMAP(A1)
Dus C:\Map1\Map2\Map3\Build_xx in A1 levert dan inderdaad Build_xx op.
 
Laatst bewerkt:
Hallo Edmoor,

Bedankt voor je snelle reactie.

Ik heb de functie in een nieuwe module gezet.
De padnaam staat in bijvoorbeeld A1.
Vervolgens zet ik in A2 =LAATSTEMAP(A1) zodat hij daar dan het woord dat na de laatste '\'

Nu blijft de cel leeg (ik dacht nog even dat de tekstkleur misschien wit was).

Wat doe ik niet goed?
 
De code is goed, dus plaats een voorbeeld document waarin je probleem duidelijk is.
 
Hallo Edmoor,

Zie bijlage.

Mogelijk stop ik het stukje code op een onjuiste plaats: in een 'Module'.
 

Bijlagen

De formule in A1 geeft een onjuiste waarde.
Zet daar voor de test maar eens dit in: C:\Map1\Map2\Map3\Build_xx
Dan zal je zien dat de functie het gewoon doet.
 
Check!

Iets met een servernaam vrees ik.

Wordt met de formule getoond als H:\map\map1\map2\mapetc maar zal in werkelijkheid een andere vorm hebben.

In ieder geval bedankt voor je moeite en kloppende code!

---- UPDATE ----

Natuurlijk klopt jou code, mijn pad 'klopt' niet voor deze code. Hij geeft een 'blanco' terug omdat er nog een '\' aan het einde van de padnaam staat. Daar staat dus niks. :o

C:\Map1\Map2\Map3\Build_xx\

Het moet dus eigenlijk het woord zijn voor de laatste '\' zijn....:confused:

Code:
Function LAATSTEMAP(Target As Range) As String
    Map = Split(Target, "\" ) [B][I][U]'en dan iets van -1 ....[/U][/I][/B]
    LAATSTEMAP = Map(UBound(Map))
End Function
 
Laatst bewerkt:
Maak er dan dit van:
Code:
Function LAATSTEMAP(Target As Range) As String
    Bron = Target
    If Right(Bron, 1) = "\" Then Bron = Left(Bron, Len(Bron) - 1)
    Map = Split(Bron, "\")
    LAATSTEMAP = Map(UBound(Map))
End Function
 
Voor de werking maakt het niks uit maar deze vind ik netter:
Code:
Function LAATSTEMAP(Target As Range) As String
    Map = Split(Target, "\")
    LAATSTEMAP = IIf(Map(UBound(Map)) = "", Map(UBound(Map) - 1), Map(UBound(Map)))
End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan