Workbooks.open挂起

时间:2018-03-21 15:48:10

标签: excel-vba vba excel

我有一个宏,它将从网络位置打开另一个工作簿,比较范围中的某些值,复制/粘贴任何不同的工作簿,然后关闭该文件。我使用变量打开文件,因为相应的文件名基于当前日期。我还设置了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

1 个答案:

答案 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