Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert Shared folder path to UNC path

I'm trying to convert current shared folder path to unc path by manipulating current path with computer name. However result in compile error: expected array on the line"elem = UBound(CurrentPathA)" in Public Function UNCpath(). Can you guys tell me what seems to be the problem causing this issue? and perhaps share better idea to get unc path?

    Option Explicit

    #If VBA7 Then
    Private Declare PtrSafe Function fnGetComputerName Lib "kernel32" Alias "GetComputerNameW" (ByVal lpBuffer As LongPtr, ByRef nSize As Long) As Long
    #Else
    Private Declare Function fnGetComputerName Lib "kernel32" Alias "GetComputerNameW" (ByVal lpBuffer As Long, ByRef nSize As Long) As Long
    #End If

    Public Function GetComputerName() As String
    Const MAX_COMPUTERNAME_LENGTH As Long = 31

    Dim buf As String, buf_len As Long

    buf = String$(MAX_COMPUTERNAME_LENGTH + 1, 0)
    buf_len = Len(buf)

    If (fnGetComputerName(StrPtr(buf), buf_len)) = 0 Then
    GetComputerName = "ErrorGettingComputerName"
    Else
    GetComputerName = Left$(buf, buf_len)
    End If
    End Function


    Public Function UNCpath() As String
    Dim CompName As String, CurrentPath As String, CurrentPathA As String

    CompName = GetComputerName()
    CurrentPath = ThisWorkbook.Path
    CurrentPathA = Split(CurrentPath, "\")
    elem = UBound(CurrentPathA)
    CurrentPath = CurrentPathA(elem)
    UNCpath = "\\" & CompName & "\" & CurrentPath
    End Function
like image 453
Milo Kang Avatar asked Dec 06 '25 03:12

Milo Kang


2 Answers

Or use file system object:

Function GetUNCLateBound(strMappedDrive As String) As String

    Dim objFso  As Object
    Set objFso = CreateObject("Scripting.FileSystemObject")

    Dim strDrive As String
    Dim strShare As String

    'Separate the mapped letter from
    'any following sub-folders
    strDrive = objFso.GetDriveName(strMappedDrive)

    'find the UNC share name from the mapped letter
    strShare = objFso.Drives(strDrive & "\").ShareName

    'The Replace function allows for sub-folders
    'of the mapped drive
    GetUNCLateBound = Replace(strMappedDrive, strDrive, strShare)

    Set objFso = Nothing 'Destroy the object

End Function

I just found and modified this, to which the credit is due, to be late-bound:

http://pagecommunication.co.uk/2014/07/vba-to-convert-a-mapped-drive-letter-to-unc-path/

like image 61
Steve Rindsberg Avatar answered Dec 08 '25 20:12

Steve Rindsberg


I'm surprised that this line doesn't throw a Mismatch error:

CurrentPathA = Split(CurrentPath, "\")

The Split function converts a string to an array. So, attempting to assign the result of Split to a string variable should raise an error.

In any case, the Ubound function requires an array. Thus, the error when you're doing Ubound(_string_) instead of UBound(_array_).

Dim CurrentPathA As Variant

like image 26
David Zemens Avatar answered Dec 08 '25 18:12

David Zemens



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!