【问题标题】:Access Shared Network Folder访问共享网络文件夹
【发布时间】:2014-12-02 11:24:51
【问题描述】:

我需要通过 VBA 访问托管在网络文件服务器上的文件夹。该文件夹只能通过我有用户名和密码的服务帐户(不同于普通用户帐户)以书面形式访问。

通过 UI,我可以看到该文件夹​​并将其映射为本地驱动器,但为了以书面形式访问它,我需要从 Windows 注销并通过服务帐户登录。

有没有办法在普通用户会话期间访问网络文件夹,但在 VBA 代码中硬编码用户名和密码?

我确实尝试将文件夹映射为本地驱动器:

Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "S:", "\\corp-server\HostingFolder", False, Username, pwd

但没有工作(“S”驱动器未映射)。相反,如果我这样做但不提供用户名和密码:

Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "S:", "\\corp-server\HostingFolder"

效果很好。

现在想知道我正在尝试做的事情是否真的可行?如果没有,有没有其他选择?

谢谢

【问题讨论】:

    标签: excel vba networking shared


    【解决方案1】:

    您可能会在测试中发现 this answer 的价值。

    基本上,我会检查几件事...

    1. 确保您尚未使用当前登录用户连接到此资源。如果是,您可能会收到如下错误消息:

    2. 确保您在用户名中使用domain\username 语法。

    否则我认为你是正确的轨道。我根据上面的链接整理了一些示例代码,并且能够以不同的用户名成功连接到网络共享并遍历文件列表。

    (请注意,您实际上不必映射驱动器来建立连接。)

    以下代码是Access network share from within VBScript eg FileSystemObject 中列出的示例的一个非常快速(有效)的 VBA 实现

    Public Sub TestNetShareName()
    
        Dim NetworkObject As Object
        Dim FSO As Object
        Dim Directory As Object
        Dim Filename As Object
        Dim ServerShare As String
        Dim UserName As String
        Dim Password As String
    
        ServerShare = "\\corp-server\HostingFolder"
        UserName = "mydomain\myuser"
        Password = "freddie123"
    
        Set NetworkObject = CreateObject("WScript.Network")
        Set FSO = CreateObject("Scripting.FileSystemObject")
    
        NetworkObject.MapNetworkDrive "", ServerShare, False, UserName, Password
    
        Set Directory = FSO.GetFolder(ServerShare)
        For Each Filename In Directory.Files
            Debug.Print Filename.Name
        Next
    
        Set Filename = Nothing
        Set Directory = Nothing
        Set FSO = Nothing
    
        NetworkObject.RemoveNetworkDrive ServerShare, True, False
    
        Set NetworkObject = Nothing
    
    End Sub
    

    【讨论】:

    • 好东西,谢谢!由于我目前在家工作,我只能通过 VPN 尝试您的代码并且没有工作(返回“错误的用户名或密码”错误)。尝试使用和不使用用户名中的域。通过在资源管理器中打开目标文件夹,我还能够重现您的上述错误(多个连接)。我现在需要在回到办公室时进行测试,但这对我来说总体上听起来不错并且“必须”工作。如果您认为还有其他我可以尝试的方法,请告诉我,否则我们周一再谈!
    • 这对我来说非常有效。非常感谢您提供如此干净的代码。
    • 嘿,这段代码太棒了。第一次工作,几乎没有按摩。干杯!
    • 如果用户已经连接了怎么办?如何通过VBA 断开会话?或者使用现有的连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多