宏冻结词

时间:2015-03-30 15:26:32

标签: vba ms-word word-vba

我有一个非常基本的宏,如下所示:

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和宏很新,并且想知道是什么原因导致了这个问题?

3 个答案:

答案 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是否发生运行时错误(这可能就是这种情况)。