我有一个宏,它将从网络位置打开另一个工作簿,比较范围中的某些值,复制/粘贴任何不同的工作簿,然后关闭该文件。我使用变量打开文件,因为相应的文件名基于当前日期。我还设置了Application.ScreenUpdating = False和Application.EnableEvents = False
由于某种原因,代码已经开始挂在workheets.open行上,我甚至不能 CTRL + Break 来摆脱它。我必须手动关闭Excel,有时它会给我一个错误消息,抱怨没有“足够的内存来完成此操作”。
我可以在代码中停止并确认变量正在提供正确的字符串,这相当于:
“\ Clarkbg01 \ public \ PRODUCTION MEETING \ PROD MEETING 3-21-18.xlsm”
我可以将其粘贴到Windows资源管理器中,它会立即打开,没有任何问题。我可以从资源管理器中手动选择该文件,它将打开,没有任何问题。我可以将以下行粘贴到即时窗口中,它会挂起......
select
case when is_first then user_name end as user_name,
case when is_first then email end as email,
case when is_first then info end as info,
address_field1
from
(
select
u.user_name,
u.email,
i.info,
a.address_field1,
a.address_field1 = (select min(address_field1)
from address fa
where fa.user_id = a.user_id) as is_first
from user u
join info i on u.user_id = i.user_id
join address a on u.user_id = a.user_id
) compared
order by user_name, email, info, address_field1;
即使我打开一张空白纸并从即时窗口执行该行,也会发生这种情况。
从我的宏开始,逐步完成代码顺利进行。我可以验证所有变量是否正确,但是当它跨越workbooks.open时,它会挂起。我有其他的宏打开工作簿,执行更复杂的例程,然后关闭它们没有问题,但我真的坚持为什么这个给了我这么多问题。
有什么想法吗?
以下是代码:
workbooks.Open("\\Clarkbg01\public\PRODUCTION MEETING\PROD MEETING 3-21-18.xlsm")
End Sub
答案 0 :(得分:0)
如果您打开的工作簿包含Workbook_Open
事件中的代码,则会在事件触发时尝试执行。
要停止此行为,请使用Application.AutomationSecurity Property。
Public Sub Test()
Dim OriginalSecuritySetting As MsoAutomationSecurity
OriginalSecuritySetting = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityForceDisable
'Open other workbook
Application.AutomationSecurity = OriginalSecuritySetting
End Sub