在刷新数据时,使用Excel中的Userforms自动input密码

我周围有一个很好的看看,虽然我可以find一些难题,我努力把它放在一起。

我想要做的是编写一个清除工作表中filter的macros,向用户请求一个密码,然后在保存为今天的date之前,应用程序将使用该密码来刷新受密码保护的SQL源中的数据。

作为今天的date保存的macros是相当容易的,我已经做了类似的东西已经。 我想我也已经破解了这个filter的问题。

我在哪里挣扎是与密码问题。 当我手动刷新时,我必须input七次左右的密码。 这显然是一个裤子,所以我宁愿让用户键入一次,然后让macros“记住”这个密码,并在需要的时候input它。

我明白,我需要调用一个用户窗体,我创build并称为PassBox。 我甚至在那里创build了一个名为PasswordBox的文本框和一个名为“OK”的OKbutton。 它甚至显示哈希标记,而不是实际的密码。

我倒下的是如何让Excel使用密码数据。 我不是在本地保存密码,因为如果有人更改数据,这会使修复电子表格变得更加困难,而且还会导致我宁愿避免的数据保护问题。

我假设我需要让Excel将密码string存储为一个值,然后重复到SQL Server,但我不知道该怎么做!

代码我到目前为止:

Sub Refresher() 'Refreshes the spreadsheet and copies it with today's date 'Clears all filters On Error Resume Next ActiveWorkbook.ShowAllData 'Calls Password Userform, saves password entered there as a string 'Step 1: Call PassBox 'Step 2 : once user hits ok, save string entered in password box for use in SQL servers 'Refreshes Spreadsheet ActiveWorkbook.RefreshAll 'Step 2 Enter password. 'Saves Spreadsheet ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.Path & "+++Location+++" & Format(Date, ddmmyyyy) & ".xls" End Sub 

正如前面的评论所指出的那样,按照你打算这样做的方式来做这件事会有些困难。 但是不可能编写SQL更新,然后使用代码中的Form1.txtPasswordBox.Value来获取数据?

 Set conRCServer = New ADODB.Connection conServer.ConnectionString = "PROVIDER=SQLOLEDB; " _ & "DATA SOURCE=YourSQL_Server; " _ & "INITIAL CATALOG=DatabaseName; " _ & "User ID=" & frmCredentials.fldLogin & ";" _ & "Password=" & frmCredentials.fldPassword conRCServer.Open 

因此,您将frmCredentials表单呈现给用户,并要求input用户名和密码。 一旦进入并且这个对有效,你可以用VBA更新所有的SQL数据。 当然,这意味着你将不得不打破Excel文件的所有直接链接到SQL,所有的更新将完全由VBA控制。

注意:也可以select在表单中的文本框中掩码密码。