excel 2007 Workbook_open无效

我试图清除打印区域和自动filter,当excel打开:总是新手在Excel VBA所以把下面的代码从googlesearch这个代码我已经在XLStart文件夹中的Personal.xlsb的ThisWorkbook和当然macros安全已经设置为启用所有的macros

Option Explicit Public WithEvents xlApp As Excel.Application Private Sub Workbook_Open() Set xlApp = Application End Sub Private Sub Workbook_Close() Set xlApp = Nothing End Sub Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook) Application.EnableEvents = False Call ClrPrntArea Application.EnableEvents = True End Sub 

这是ClrPrntArea

 Sub ClrPrntArea() Dim ws As Object For i = 1 To ActiveWorkbook.Worksheets.count With Worksheets(i) .PageSetup.PrintArea = "" .PageSetup.FitToPagesWide = 1 End With Next End Sub 

我也将另一个macros调用模块在个人xlsb重置autofiter一旦上面开始工作..任何投入将真正有用的

PERSONAL.xlsb ,模块ThisWorkbook ,请尝试下面; 它几乎和你的请求中的代码一样,有一些修改的代码:

  • 应用程序对象声明为Private
  • 事件例程使用本地WB对象variables作为参数,而不是ActiveWorkbook对象
  • 取代For ... Next by For Each ... Next并使用局部对象variables
  • 陷阱处理PERSONAL.xlsb本身

一旦你快乐的删除所有的MsgBox语句(和Else ),他们只是为了显示发生了什么,什么时候。

 Private WithEvents Excel_App As Excel.Application ' runs when Excel_App encounters a Workbook_Open() event Private Sub Excel_App_WorkbookOpen(ByVal WB As Workbook) Dim WS As Worksheet If WB.Name <> "PERSONAL.xlsb" Then MsgBox "PERSONAL.xlsb: Excel_App_WorkbookOpen(): " & WB.Name For Each WS In WB.Worksheets WS.PageSetup.PrintArea = "" WS.PageSetup.FitToPagesWide = 1 If WS.FilterMode Then WS.ShowAllData End If Next Else MsgBox "PERSONAL.xlsb: Excel_App_WorkbookOpen(): myself" End If End Sub ' runs when PERSONAL.xlsb is opened ' assign current Excel application to object variable Excel_App Private Sub Workbook_Open() MsgBox "PERSONAL.xlsb: Workbook_Open()" Set Excel_App = Application End Sub 

注意

双击 Excel文件(例如桌面上)时,事件处理程序不启动时,请closures所有Excel应用程序,并检查任务pipe理器以查找需要终止的其他孤立Excel进程。 在玩这个代码时,它发生在我身上