1

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

また、上記の作業が開始されたら、autofiter をリセットするために、モジュールへの別のマクロ呼び出しを個人用 xlsb に配置します。

4

1 に答える 1

0

PERSONAL.xlsbmoduleThisWorkbookで、以下を試してください。これは、いくつかの変更を加えた、リクエストとほぼ同じコードです。

  • Private と宣言されたアプリケーション オブジェクト
  • イベント ルーチンは、オブジェクトWBの代わりにパラメーターとして渡されたローカル オブジェクト変数を使用します。ActiveWorkbook
  • ローカルオブジェクト変数に置き換え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 プロセスがないかタスク マネージャーを調べます。このコードで遊んでいるときに私に起こりました

于 2013-06-10T06:58:18.810 に答える