我使用的是 Windows 7 和 Access 2010。我正在尝试连接到我们的服务器以查看文件。
我的问题是我不想在代码中包含用户名或密码。如果需要身份验证,我想让 Windows 提示它(从我的测试来看,一旦你进行了身份验证,你就不必重新做一段时间了)。
从 MapNetworkDrive Object MSDN 开始, strUser 和 strPassword 是可选的并使用当前用户凭据,但这似乎不适用于服务器。
Dim objFSO As Object
Dim objFolder As Object
Dim objNetwork As Object
Dim strShareLetter As String
Dim strURL As String, strUser as String, strPassword as String
strShareLetter = "L:"
Set objFSO = CreateObject("Scripting.FileSystemObject")
strURL = "\\company@SSL\DavWWWRoot\companydav\nodes\12345678\"
Set objNetwork = CreateObject("WScript.Network")
objNetwork.MapNetworkDrive strShareLetter, strURL, False, strUser, strPassword
Set objFolder = objFSO.GetFolder(strURL)
MsgBox objFolder.Files.Count
MsgBox objFolder.SubFolders.Count
Set objFolder = Nothing
Set objFSO = Nothing
objNetwork.RemoveNetworkDrive (strShareLetter)
Set objNetwork = Nothing
如果我在代码中写下我的用户/密码,一切正常。但是我需要其他用户才能使用它,而且我不希望我的凭据被到处使用。我想要一个 Windows 凭据提示或类似的东西。出于安全原因,我不想通过 vba 提示输入用户密码。有任何想法吗?我在谷歌上搜索了解决方案,但似乎找不到。谢谢你
最佳答案
听起来您已经意识到您的项目中需要某种用户表单来收集用户的凭据。
这就是我将如何做到这一点。我会从 VBA 编辑器插入一个用户表单。从那里我会抓取几个文本框和标签,将一个框标记为“用户 ID”,另一个标记为“密码”。对于密码文本框,我一定要在 PasswordChar 属性中插入“*”以屏蔽密码。我还会在那里放一个按钮,上面写着“提交”或“登录”或类似的东西。
完成后,您将需要几个属性:
Private pUserId As String
Private pPassword As String
Public Property Let UserId(value as string)
pUserId = value
End Property
Public Property Get UserId() as string
UserId = pUserId
End Property
Public Property Let Password(value as string)
pPassword = value
End Property
Public Property Get Password() As String
Password = pPassword
End Property
然后,您将需要使用登录按钮的单击事件将文本框中的信息加载到属性中并隐藏表单。
Private Sub CommandButton1_Click()
UserId = TextBox1.text
Password = TextBox2.text
Me.hide
End Sub
然后您所要做的就是变暗并向用户显示用户表单。
...
Set objNetwork = CreateObject("WScript.Network")
Dim LogInForm As UserForm1
Set LogInForm = New UserForm1
LogInForm.Show vbModal
objNetwork.MapNetworkDrive strShareLetter, strURL, False, LogInForm.UserId, LogInForm.Password
...
仅此而已。您可能需要学习如何在 VBA 中创建用户表单或复习它。
关于VBA MapNetworkDrive 到带有 Windows 凭据的服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26741669/