[英]excel 2007 Workbook_open not working
我试图在Excel打开时清除“打印区域和自动过滤器”:Excel vba中的新手,因此将以下代码从谷歌搜索中搜集了此代码。我已将此代码放入XLstart文件夹中的Personal.xlsb的ThisWorkbook中,并且将宏安全性设置为启用所有宏
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
我还将在个人xlsb中对模块进行另一个宏调用,以在上述方法开始工作后重置自动装配器。任何输入都将非常有帮助
在PERSONAL.xlsb
模块ThisWorkbook
,尝试以下操作; 它几乎与您的请求中的代码相同,但有一些修改:
WB
对象变量作为参数,而不是ActiveWorkbook
对象 For Each ... Next
代替For ... Next
, For Each ... Next
使用局部对象变量 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文件(例如,在桌面上)时事件处理程序没有启动时,请关闭所有Excel应用程序,并检查任务管理器中是否有其他需要终止的孤立Excel进程。 我在玩这段代码时发生了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.