我需要通过 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"
它工作得很好。
现在想知道我想做的事情是否真的可能?如果没有,还有其他选择吗?
Thanks
你可能会发现这个答案在您的测试中有价值。
本质上,我会检查几件事......
Make sure you are not already connected to this resource using the current logged in user. If you are, you might get an error message like the following:
确保您正在使用domain\username
您的用户名中的语法。
否则我认为你是正确的道路。我根据上面的链接组合了一些示例代码,并能够成功连接到不同用户名下的网络共享并迭代文件列表。
(请注意,您实际上不必映射驱动器来建立连接。)
以下代码是对列出的示例的非常快速(有效)的 VBA 实现从 VBScript 中访问网络共享,例如 FileSystemObject
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)