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
byFor 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进程。 在玩这个代码时,它发生在我身上