2014-11-04 91 views
4

我使用Windows 7和Access 2010.我试图连接到我们的服务器来查看文件。 我的问题是,我不想在代码中有用户名或密码。如果需要验证,我希望有窗口提示它(从我的测试中,一旦验证,您不必重新执行一段时间)。 从MapNetworkDrive Object MSDN,strUser和strPassword是可选的,并使用当前用户凭据,但这似乎不适用于服务器。VBA MapNetworkDrive与Windows凭据的服务器

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 = "\\[email protected]\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提示输入用户密码。

任何想法?我搜索谷歌的解决方案,但我似乎无法找到一个。谢谢

+1

您担心什么安全原因?如果您提示用户,数据不会超出方法的寿命。看起来像一个简单的解决方案。 – RubberDuck 2014-11-04 19:03:24

+0

许多用户将使用该应用程序并通过alt + F11访问代码,因为这里没有任何内容受到保护。有些人在vba中知道一点就可以将用户/密码保存在服务器上的文本文件中,或者在之后做任何事情。 (秘书可以获得bigboss密码)。有了我的背景,我只是不喜欢把密码作为字符串输入到任何地方。 – trixrabbit 2014-11-05 19:14:49

+0

我觉得这个问题有点......最好。用户只能访问自己的用户名和密码,但如果您担心这一点,只需密码保护VBA项目。 – RubberDuck 2014-11-05 19:18:04

回答

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中创建用户表单或者在此基础上进行修改。