PDA

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!