【问题标题】:How to write a file path for two people mapped to different drives如何为映射到不同驱动器的两个人编写文件路径
【发布时间】:2019-01-25 21:00:51
【问题描述】:

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

我的文件夹映射到 G 盘,我的同事在 I 盘上。如何编写文件路径来读取我们的两个驱动器?

TIA!

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Environ("Username") <> "agene" And Environ("Username") <> "aking" Then
        Exit Sub
    End If
    With ThisWorkbook
        .SaveCopyAs ("\Excel\Backup\Backup of " & .Name)
    End With
End Sub

【问题讨论】:

  • 将文件直接写入 UNC 路径 (\\servername\folder\folder2) - 不要使用映射的驱动器号。
  • 要找出 UNC 路径,正如 @TimWilliams 所写,您可以在 Windows 命令提示符处执行 net use 命令。
  • 注意 - 我并不是建议您根本不映射驱动器,只是在驱动器号未知的情况下使用 UNC 路径

标签: excel vba


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多