Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何为映射到不同驱动器的两个人编写文件路径_Excel_Vba - Fatal编程技术网

Excel 如何为映射到不同驱动器的两个人编写文件路径

Excel 如何为映射到不同驱动器的两个人编写文件路径,excel,vba,Excel,Vba,我正在尝试编写一个代码,仅当某些用户正在保存时,才将excel电子表格的备份保存到同一共享文件夹,映射到两个不同的字母。这是一个很多人都可以访问的文件,所以我想只在我或我的同事在其中时保存一个备份 我把文件夹映射到G驱动器,我的同事把它放在I驱动器上。如何写入文件路径以读取两个驱动器 蒂亚 Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值) 如果Environ(“用户名”)“agene”和Environ(“用户名”)“aking”,则 出口接头 如果结

我正在尝试编写一个代码,仅当某些用户正在保存时,才将excel电子表格的备份保存到同一共享文件夹,映射到两个不同的字母。这是一个很多人都可以访问的文件,所以我想只在我或我的同事在其中时保存一个备份

我把文件夹映射到G驱动器,我的同事把它放在I驱动器上。如何写入文件路径以读取两个驱动器

蒂亚

Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
如果Environ(“用户名”)“agene”和Environ(“用户名”)“aking”,则
出口接头
如果结束
使用此工作簿
.SaveCopyAs(“\Excel\Backup\Backup of”&.Name)
以
端接头

网络路径很棘手。我根据另一位作者的工作为自己的库创建了一个函数,以确定给定驱动器号的网络驱动器的完全限定路径名。因此,获取每个用户的驱动器号,确定完整的网络路径,并始终使用该网络路径保存文件

Public Function GetNetworkPath(ByVal driveName As String) As String
    '--- Converts a drive letter, e.g. 'W:\', to its fully qualified network
    '    path useful for saving a network folder location without any user-
    '    specific custom mapping
    '--- from https://www.mrexcel.com/forum/excel-questions/
    '            658830-show-full-file-paths-unc-not-mapped-drive-letters-print.html
    Dim networkObject  As Object
    Dim networkDrives As Object

    Set networkObject = CreateObject("WScript.Network")
    Set networkDrives = networkObject.enumnetworkdrives

    Dim i As Long
    GetNetworkPath = vbNullString
    For i = 0 To networkDrives.count - 1 Step 2
        If UCase$(networkDrives.item(i)) = UCase$(driveName) Then
            GetNetworkPath = networkDrives.item(i + 1)
            Exit For
        End If
    Next
End Function

将文件直接写入UNC路径(\\servername\folder\folder2)-不要使用映射的驱动器号。要在@TimWilliams写入时找到UNC路径,您可以在Windows命令提示符下执行
net use
命令。注意-我不是建议您根本不映射驱动器,仅在驱动器号未知的情况下使用UNC路径
Public Function GetNetworkPath(ByVal driveName As String) As String
    '--- Converts a drive letter, e.g. 'W:\', to its fully qualified network
    '    path useful for saving a network folder location without any user-
    '    specific custom mapping
    '--- from https://www.mrexcel.com/forum/excel-questions/
    '            658830-show-full-file-paths-unc-not-mapped-drive-letters-print.html
    Dim networkObject  As Object
    Dim networkDrives As Object

    Set networkObject = CreateObject("WScript.Network")
    Set networkDrives = networkObject.enumnetworkdrives

    Dim i As Long
    GetNetworkPath = vbNullString
    For i = 0 To networkDrives.count - 1 Step 2
        If UCase$(networkDrives.item(i)) = UCase$(driveName) Then
            GetNetworkPath = networkDrives.item(i + 1)
            Exit For
        End If
    Next
End Function