我有一个非常基本的宏,如下所示:
Option Explicit
Sub ReplaceNumReviewers()
Application.ScreenUpdating = False
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Set exWb = objExcel.Workbooks.Open("C:\Users\crouz\Desktop\data.xlsx")
ThisDocument.numManager.Caption = exWb.Sheets("FeedbackData").Cells(7, 2)
ThisDocument.numPeers.Caption = exWb.Sheets("FeedbackData").Cells(8, 2)
ThisDocument.numDirectReports.Caption = exWb.Sheets("FeedbackData").Cells(9, 2)
ThisDocument.numTotal.Caption = exWb.Sheets("FeedbackData").Cells(10, 2)
exWb.Close
Set exWb = Nothing
Application.ScreenUpdating = True
End Sub
当我通过添加到快速访问工具栏的按钮运行它时,它会运行,替换值然后冻结word文档。我可以使用其他应用程序,除了MS Word,我必须通过进程管理器杀死它。
我对VBA和宏很新,并且想知道是什么原因导致了这个问题?
答案 0 :(得分:2)
在宏的末尾,你有
application.screenupdating=false
这是一个错字吗?如果没有,请将其更改为True以解冻Word。
答案 1 :(得分:2)
好的,我发现了如何解决问题。
我不得不替换
exWb.Close
与
exWb.Close SaveChanges:=False
现在它不再挂起了。 感谢大家的帮助,并使用调试器使我朝着正确的方向前进。
我在这里找到答案:vba script hangs at Workbook.Close
答案 2 :(得分:1)
处理错误。
Sub DoSomething()
On Error GoTo CleanFail
Application.ScreenUpdating = False
'your code here
CleanExit:
Application.ScreenUpdating = True
'rest of cleanup code here
Exit Sub
CleanFail:
'handle errors here
Resume CleanExit
End Sub
这样你确定ScreenUpdating
总是被设置回True
是否发生运行时错误(这可能就是这种情况)。