我想从已关闭的和受保护的工作簿中检索我选择的任何范围内的值(无需打开工作簿)。
我向任何认为这是一个重复的问题的人道歉,但我已经尽力搜索其他答案,而且从我所看到的,似乎没有人能找到适合这个问题的解决方案。 / p>
到目前为止,我使用ExecuteExcel4Macro()
从封闭(但未受保护)的工作簿中获取值没有任何问题,但是,我查询的工作簿都受到保护(使用相同的密码)。< / p>
我可以使用Workbooks.Open("wb.xls", Password:="youllneverguessit")
但这只需要半秒钟即可完成,并且屏幕在执行时会闪烁。如果必须的话,这肯定是我可以使用的,但使用ExecuteExcel4Macro是 instant 。
当我使用ExecuteExcel4Macro()
从已关闭的和受保护的工作簿中获取值时,Excel会提示我输入密码,如下所示:
我徒劳地搜索了如何取消保护已关闭的工作簿,而我正在使用的Excel4Macro函数DEREF()没有可以提供密码的参数。
理想情况下,我希望有一个只需要几个参数的函数:工作簿路径,工作簿名称(如果需要),范围(可以是A1 / R1C1或命名范围)和密码验证。老实说,这些参数并不重要,我只需要能够以编程方式提供密码验证。
这就是我目前的情况:
1)使用ExecuteExcel4Macro()
获取值:
使用此功能从已关闭且受保护的工作簿中获取值时,用户必须手动提供密码。
Function GetValue(FileName As String, _
FilePath As String, _
shtName As String, _
Rng As String) As Variant
Dim rConvert As Range
Dim pSht As Worksheet
' Convert our Rng string variable to R1C1
Set pSht = Workbooks("PERSONAL.XLSB").Sheets(1)
Set rConvert = pSht.Range(Rng)
Rng = rConvert.Address(ReferenceStyle:=xlR1C1)
' Add a backslash to the file path if the user did not
If Right(FilePath, 1) <> "\" Then FilePath = FilePath & "\"
GetValue = ExecuteExcel4Macro( _
"DEREF('" & FilePath & "[" & FileName & "]" & Code & "'!" & rng & ")")
End Function
2)打开工作簿,获取信息,关闭工作簿:
使用此功能从已关闭且受保护的工作簿中获取值时,用户无需手动执行任何操作,但需要一些时间才能执行。
Function get_value(wb_path As String, _
sht as string, _
rng_name As String, _
pass As String) As Variant
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Rng as Range
Set Rng = Workbooks.Open(wb_path, Password:=pass).Sheets(sht).Range(rng_name)
get_value = Rng.Value
wb.Close False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Function
提前谢谢!我很感激任何人的帮助,即使我们最终没有找到答案。