View Full Version : [SOLVED:] Determine level of folder in path string (e.g. C:\Level 1\Level 2\Level 3 return 3)
gmaxey
11-10-2013, 11:45 AM
I'm trying to determing the level of a folder in a path statement. I've cobbled together the following which seems to work, but was wondering if there might be a cleaner\better way. Thanks.
Sub Test()
MsgBox FolderLevel("C:\Test\Test\Test\Test\what level is this")
MsgBox FolderLevel("N:\\Test\Test\Test\Test\what level is this")
MsgBox FolderLevel("C:\Test\Test\Test\Test\what level is this\")
End Sub
Function FolderLevel(strPath As String) As Long
Dim arrLevel() As String
Dim lngIndex As Long, lngCount As Long
arrLevel = Split(strPath, "\")
For lngIndex = 0 To UBound(arrLevel)
If arrLevel(lngIndex) <> vbNullString Then
lngCount = lngCount + 1
End If
Next lngIndex
FolderLevel = lngCount - 1
End Function
mancubus
11-10-2013, 01:15 PM
maybe something like this:
remove "\\" before "\".
txt = "C:\Test\Test\Test\Test\what level is this\"
If Right(txt, 1) = "\" Then txt = Left(txt, Len(txt) - 1)
MsgBox UBound(Split(Replace(Replace(txt, ":\\", ""), ":\", ""), "\")) + 1
Bob Phillips
11-11-2013, 07:57 AM
Small tweak to mancubus' solution
Function FolderLevel(strPath As String) As Long
FolderLevel = UBound(Split(Replace(Replace(strPath, ":\\", ""), ":\", ""), "\")) - (Right(strPath, 1) <> "\")
End Function
gmaxey
11-11-2013, 08:37 AM
Mancubus, XLD
Thanks. Works great and makes perfect sense.
mancubus
11-11-2013, 09:07 AM
you're welcome. and thanks to xld for the contribution. it's more elegant now. :)
Paul_Hossler
11-12-2013, 07:56 AM
Greg --
Semi-OT question, but do you really have a double back-slash in what appears to be a mapped drive?
MsgBox FolderLevel("N:\\Test\Test\Test\Test\what level is this")
I've only seen a \\ in UNC drives before
\\server_Name\Folder1\Folder2\Folder3\Some_File_Name.dotx"]\\server_Name\Folder1\Folder2\Folder3\Some_File_Name.dotx"]\\server_Name\Folder1\Folder2\Folder3\Some_File_Name.dotx (file://\\server_Name\Folder1\Folder2\Folder3\Some_File_Name.dotx)
It might not be important, but depending on the path, you get different results. For general-purposeness (if that's a word) you might need to make it more complicated
Option Explicit
Sub drv()
Dim s As String
s = "\\server_name\Folder1\folder2\folder3\filename.ext"]\\server_name\Folder1\folder2\folder3\filename.ext"
MsgBox FolderLevel(s) ' 7
s = "\\server_name\Folder1\folder2\folder3\"]\\server_name\Folder1\folder2\folder3\"
MsgBox FolderLevel(s) ' 6
s = "\\server_name\Folder1\folder2\folder3"]\\server_name\Folder1\folder2\folder3"
MsgBox FolderLevel(s) ' 6
s = "n:\\server_name\Folder1\folder2\folder3\filename.ext"
MsgBox FolderLevel(s) ' 5
s = "n:\\server_name\Folder1\folder2\folder3\"
MsgBox FolderLevel(s) ' 4
s = "n:\\server_name\Folder1\folder2\folder3\"
MsgBox FolderLevel(s) ' 4
s = "n:\Folder1\folder2\folder3\filename.ext"
MsgBox FolderLevel(s) ' 4
s = "n:\Folder1\folder2\folder3\"
MsgBox FolderLevel(s) ' 3
s = "n:\Folder1\folder2\folder3\"
MsgBox FolderLevel(s) ' 3
End Sub
Function FolderLevel(strPath As String) As Long
FolderLevel = UBound(Split(Replace(Replace(strPath, ":\\", ""), ":\", ""), "\")) - (Right(strPath, 1) <> "\")
End Function
Paul
gmaxey
11-12-2013, 08:09 AM
Paul,
To be honest I've never had any experience with network drives, so you could be correct. I'll look this over. Thanks!
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.