gpt4 book ai didi

excel - VBA - 从 OLEDB 连接字符串中删除密码

转载 作者:行者123 更新时间:2023-12-01 22:49:28 25 4
gpt4 key购买 nike

我有一个 Excel 文件,其中包含由多个数据透视表利用的一系列 OLEDB 连接。我想创建一个 VBA 函数,在文件关闭时从该几个连接字符串中删除所有密码(以便用户密码不会被保留)。首先,我认为我需要做的就是将“保存密码”属性设置为 false,如下所示:

Public Sub RemovePasswordByNamePrefix()
Dim cn As Object
Dim oledbCn As OLEDBConnection

For Each cn In ThisWorkbook.connections
Set oledbCn = cn.OLEDBConnection
oledbCn.SavePassword = False
Next
End Sub

应该可以正常工作,关闭文件并重新打开它时,您不应再在连接字符串中看到密码。它不应该被“保存”:

enter image description here

错误,密码仍然存在...它已“已保存”。不确定该功能应该做什么。也许指的是不同的密码?所以,我尝试了big hammer approach ,不幸的是它有它自己的挑战,到目前为止我还没有成功。

我不太确定如何做到这一点...为什么这如此严重不安全?它会在每个包含此类连接字符串的文件中保留明文密码,任何可以访问该文件的人都可以轻松读取。

也许我可以制作某种正则表达式来仅从文件中删除密码?当我在界面中执行此操作时,我的多维数据集会刷新并提示我输入凭据,(我想知道)如果我在 VBA 中执行此操作,即使触发器位于 excel 关闭时,也会发生这种情况吗?

底线:防止这些密码在文件关闭时保留在文件中的最佳方法是什么?

最佳答案

@TomJohnRiddle 指出我应该考虑修改类似于 following question. 的连接字符串。最初,我担心采用这种方法可能会在修改连接字符串后提示用户显示登录屏幕。然而,由于我没有更好的想法,所以我尝试了一下,它似乎有效,这是我模拟的:

Public Sub RemovePasswordByNamePrefix()
Dim cn As Object
Dim oledbCn As OLEDBConnection

Dim regEx As New RegExp
regEx.Pattern = "Password=[^;]*;"

For Each cn In ThisWorkbook.connections
Set oledbCn = cn.OLEDBConnection
oledbCn.SavePassword = False

oledbCn.connection = regEx.Replace(oledbCn.connection, "")
oledbCn.CommandText = "" 'My app repopulates this after open
Next
End Sub

它似乎有效:

enter image description here

所以我想我会采用这种方法,但我仍然愿意接受其他建议。清除所有内容并完全重新加载就好了,但到目前为止还没有 appear to be possible.

我还关心哪些版本的 VBA 支持 "Regex" references 。我想要与 Excel 2010+ 32/64 位兼容的东西。我尚未在任何旧版本上对此进行测试(我当前正在运行 Office 365)。我认为一切都会正常工作,但我一直unpleasantly surprised这些事情都已经过去了。

关于excel - VBA - 从 OLEDB 连接字符串中删除密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com