我正在使用Windows 7和Access 2010.我试图连接到我们的服务器来查看文件。 我的问题是我不想在代码中使用用户名或密码。如果需要身份验证,我希望有窗口提示它(从我的测试开始,一旦你进行身份验证,你就不必重新做一段时间)。 从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提示输入用户密码。
有什么想法吗?我搜索谷歌的解决方案,但我似乎找不到。谢谢
答案 0 :(得分:1)
听起来您已经认识到在项目中需要某种用户表单来收集用户的凭据。
这是我怎么做的。我从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中创建用户表单或刷新它。