【发布时间】:2015-09-24 19:05:52
【问题描述】:
我需要从已从 Intranet 站点生成并新打开的文件 ('DatabaseExport.xlsx') 中提取数据。该文件在受保护的视图中打开(屏幕顶部的黄色横幅)。我认为有必要禁用受保护的视图,以便我可以从文件中提取数据。我的 VBA 包含在单独的文件“GetAndAnalyseData.xlsm”中:
NameOfNewFile = "ooo"
Do
On Error Resume Next
Application.ActiveProtectedViewWindow.Edit 'This never works first time
NameOfNewFile = Left(ActiveWorkbook.Name, 14)
On Error GoTo 0
If NameOfNewFile = "ooo" Then
ttt = MsgBox("this should not be possible!", vbOKCancel)
If ttt = vbCancel Then Stop
End If
Loop While NameOfNewFile = "ooo"
当我运行代码时:
- 我收到一个消息框,提示“这不可能!”
- 如果单击“确定”,我会不断收到相同的消息框,并且该文件仍处于受保护的视图中。
- 如果我单击取消,然后按 F5(继续执行),循环将正常工作(受保护的视图被取消,TEMP 的值设置为文件名,循环退出并且宏继续。
如果我不使用“Resume Next”,我尝试为 NameOfNewFile 赋值的那一行会返回错误:
运行时错误“91”:对象变量或未设置块变量
我尝试了几种方法来解决这个问题:
-
在下载文件之前运行此行,并且在尝试关闭受保护的视图之前立即运行,但行为仍然相同。
Application.AutomationSecurity = msoAutomationSecurityForceDisable 将文件夹(存储下载文件的位置)置于受信任的位置,但我的用户设置不允许这样做。
取消选中信任中心中的“为源自 Internet 的文件启用受保护的视图”框,但如果取消选中此框,我将无法打开文件。
-
插入此代码(但“设置 wbPV 行”会导致运行时错误“424”:需要对象):
Dim wbPV As Workbook If Application.ProtectedViewWindows.Count > 0 Then Set wbPV = ActiveProtectedViewWindow.Edit End If
如何以编程方式为此类下载的文件关闭受保护的视图?还是有其他方法可以从文件中获取数据?
【问题讨论】:
-
你试过 AcativeSheet.Unprotect
-
been generated and newly opened这是怎么回事?您可以将其保存而不是打开,这应该可以解决您的问题吗? -
感谢您的回复。我已经尝试过 Activesheet.Unprotect 并给出了类似的错误消息,如果我将它放在“出错”部分中,它会给出与已经存在的行相同的行为。
-
抱歉,澄清一下,Activesheet.Unprotect 给出错误 91。要回答 @findwindow,该文件是由公司 Intranet 站点生成的。保存而不是打开是一个很好的解决方法(如果我保存在手动指定的位置而不是默认的下载文件夹中,
ActiveProtectedViewWindow.Edit命令第一次起作用)。 -
如果您将
NameOfNewFile = Left(ActiveWorkbook.Name, 14)移动到之后On Error GoTo 0,您会收到错误消息吗?我强烈怀疑你会。不保证有效,但请尝试在Do之后添加DoEvents?