【发布时间】:2016-04-07 20:37:32
【问题描述】:
我在这里遇到了一个导致 excel 挂起的宏问题。我尝试了几个选项并无休止地搜索。我有 3 种形式,但分开。这是我的步骤:
- 弹出用户表单
- 列表框中的项目在表单中被双击。
- 这将打开另一个工作簿并在每个工作表上运行代码。
- (这是在另一个函数中完成的,并且运行良好,大约需要 15 秒,以关注新工作簿结束。)
- 关闭用户窗体。 (这会导致它挂起 7 秒到 90 秒,具体取决于其他工作簿的大小。)
代码如下(格式不正确,我必须用手机...无法通过电脑登录。)
Private sub lb_blah_DblClick (Byval Cancel as MSForms.ReturnBoolean)
Me.lbl_blah2.caption = "opening aND running"
'Open and edit xls - Works fine.
LoadAndFormat me.lb_blah.value
Me.lbl_blah2.caption = "Ran through format."
Me.repaint
'90 seconds with 29 sheets
'Me.hide
'Application.enableevents = false '70 seconds
Unload me '90 seconds - 29 sheets
End Sub
【问题讨论】:
-
这有很多活动的部分。您是否确认其他工作簿中的代码在没有用户表单的情况下可以完美运行?它有没有在没有挂起的情况下运行并完成?即
LoadAndFormat "workbook Name"是否完美地在潜艇中工作? -
是的,我有...而且它每次都能完美运行。它的草图或粗略等价物是: 'Sub LoadAndFormat (fp as string)' ' set s = workbooks.open(fp, false)' ' for each mysheet in s.sheets' ' mysheet.columns("B:B ").insert' ' next mysheet' 'end sub'
-
是的,我有......而且它确实完美无缺。
-
那是一个线索。我们应该探索它所挂的文件和代码。
-
查看我对这个问题的回答:stackoverflow.com/questions/36432835/…。与您相关的是如何声明和显示用户表单,然后将其卸载。将 HIDE 留在您向我们展示的代码中。当控制返回调用过程时,让卸载发生。看看这种方法是否会产生更好的结果?