21

このプログラムは、ユーザーが別のサブをアクティブにするために押すことができるボタンを作成することになっています。オンラインで検索したところ、ワークブックを開くと下のサブがアクティブになるはずですが、そうではありませんか?

私は何を間違っていますか?

Option Explicit
Private Sub Workbook_Open()
Dim btn As Button
Dim rng As Range
With Worksheets("Sheet1")
    Set rng = .Range("B2:C2")
        Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
    With btn
        .Caption = "To begin the program, please click this button"
        .AutoSize = True
        .OnAction = "TableCreation1"
    End With
End With
End Sub
4

6 に答える 6

53

Private Sub Workbook_Open()サブルーチンが、Module、Form、またはSheetオブジェクトではなく、ThisWorkbookオブジェクト内に貼り付けられていることを確認してください。

于 2012-07-08T21:23:15.003 に答える
6

面白い。2009 年には、 vbforum の投稿のように、開くシートの条件付き書式設定との競合が説明されています。

このバグはまだ Excel に存在しているようで、workbook_openイベントが発生しません。Excel 2003 および 2007 ではイベントを発生させず、2013 では発生させるワークブック (古い XLS バイナリ形式) がありますworkbook_open。バージョン。

分散ワークブックで使用する回避策は、次のようにワークブックでローカル変数と 2 番目のイベントを使用することです。

''
' private variable
Private wbOpenEventRun as Boolean

''
' procedure to be called by excel when workbook opens
Private Sub Workbook_Open()
    wbOpenEventRun = true
    ' perform tasks
End Sub

''
' the selection change event fires usually.
' performance is not reduced
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Not wbOpenEventRun Then Workbook_Open
    ' perform tasks in reaction of selection change events, if required
End Sub
于 2014-12-02T13:34:08.187 に答える
2

この投稿がしばらく休眠していたことは知っていますが、この問題を解決するために何時間も苦労しました. 奇妙なことですが、ワークシートの 1 つが "ページ ビュー" になっていることに気付きました...そして、それを "通常" にするとすぐに、Workbook_Open() 関数が再び通常どおりに機能し始めました。非常に奇妙です-間違いなくExcelのバグです...最終的に解決してよかったです...誰かの役に立てば幸いです...

于 2016-10-04T03:37:13.843 に答える
0

私の解決策はちょっとあいまいで、なぜそれが潜在的な解決策として思い浮かんだのか、今でも覚えていません。私が作成した Workbook_Open() マクロが実行されないファイルは、最初に次の手順で作成しました。

  1. 関連するフォルダーを右クリックし、[新規作成] をクリックし、[ Microsoft Excel ワークシート] をクリックします。
  2. ファイルに「Workbook_1」という名前を付けました。
  3. Workbook_1を開きました。
  4. ファイル、名前を付けて保存、ファイルの種類をExcel マクロ有効ブック (*.xlsm)に変更、保存。
  5. ThisWorkbookにネストされたWorkbook_Open()を含む VBA コードを作成しました。

なんらかの理由で、私の問題は、ファイルが標準の.xlsxとして「開始」したという事実と関係があるのではないかと思いました。だから私は簡単に:

  1. Excel ( Book1 ) 内で新しい空白のワークブックを開きました。
  2. ファイル、名前を付けて保存、入力Workbook_2、ファイル タイプをExcel マクロ有効ブック (*.xlsm)に変更、保存。
  3. 元のWorkbook_1から VBA コードと構造をコピーしました。

元のWorkbook_1とは異なり、新しいWorkbook_2は、開いたときにWorkbook_Open()サブルーチンを正常に実行しました。この問題の潜在的な原因は、ファイルのタイプの履歴に関連している可能性があります (つまり、ある時点でマクロを実行できないタイプであった場合)。または、単に新しいファイルで再試行するだけで、この問題が解決したのかもしれません。いずれにせよ、これは他の解決策がうまくいかなかった人にとってはうまくいくかもしれません.

于 2019-10-01T15:45:33.683 に答える
-1

Nazim's event enable via code solutionと同様に、次の修正を見つけました。

修正

すべてのExcelワークブックとVBAウィンドウを閉じて、Workbook_Open()それを解決したものを再度開いてください。
(おそらく、上記にリンクされているNazimのソリューションと同様のイベントが有効になっているためです)。

問題経験

デバッグ中に実行を中止したため、中止する前に実行中のコードのイベントを無効にしました。最初はこの状況に気付かず、ワークブックを閉じて再度開いた後でも機能しませんでした...

推定原因

...他の開いている Excel ワークブックまたは一部のグローバル インスタンスは、再度開いたワークブックのイベントがオフになっていることを「記憶」していました。

于 2019-01-21T08:50:57.700 に答える