我需要通过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"
效果很好。
现在想知道我想要做的事实际上是否可行?如果没有,有其他选择吗?
由于
答案 0 :(得分:5)
您的测试中可能会发现this answer的价值。
基本上,我会检查一些事情......
确保您尚未使用当前登录用户连接到此资源。如果是,您可能会收到如下错误消息:
确保您在用户名中使用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