访问共享网络文件夹

时间:2014-12-02 11:24:51

标签: excel vba networking shared

我需要通过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"

效果很好。

现在想知道我想要做的事实际上是否可行?如果没有,有其他选择吗?

由于

1 个答案:

答案 0 :(得分:5)

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

基本上,我会检查一些事情......

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

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

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

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

    以下代码是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