現在オフラインです。再接続するためにインターネットの接続を待っています

Excel 2010 でシートの保護が有効の場合、フォーム コントロールに動的にマクロを貼り付けると適切なマウス カーソルの形状にならない

現象
Microsoft Excel 2010 でシートの保護が設定されている場合、フォーム コントロールに動的にマクロを割り当て、フォーム コントロールに カーソルをポイントしても適切な カーソルの形状 (指マーク) に変わりません。

この現象は、以下の条件をすべて満たす場合に発生します。

  • ファイルを開いた時点でマクロが登録されていない
  • OnAction プロパティでマクロを登録した
  • Protect メソッドを使用してシートの保護を実行した
 なお、保護されていないシートの場合、この現象は発生しません。


原因
フォーム コントロールにマウス カーソルが当てられた際、そのオブジェクトにマクロが登録済みであるかに応じてカーソルの種類が決定されます。

このカーソルの種類の判定処理では、最初に、ファイルを開いた際に行われるオブジェクトの初期化処理で登録されるオブジェクトの情報を参照します。

しかし、この判定処理において、上記の条件を満たす場合にマクロが登録済みと判断できないため、保護されたシート上のオブジェクトでは、既定で矢印 (または編集可能な場合は、十字が付加されたカーソル) が選択されます。
回避策
この現象を回避するには、VBA で OnAction プロパティおよび Protect メソッドを実行する必要がある場合は、あらかじめ何の処理も行わないマクロを登録しておきます。
状況
マイクロソフトでは、この問題について現在調査中です。詳細については、わかりしだいこの資料に掲載する予定です。
詳細

現象の再現手順

  1. Excel 2010 を起動します。
  2. [開発] タブの [挿入] をクリックし、"ボタン (フォーム コントロール)" を挿入します。
  3. [マクロの登録] で [新規作成] をクリックします。
  4. Visual Basic Editor が起動します。標準モジュールに以下のマクロを入力します。

    ' ボタンのクリックイベントSub ボタン1_Click()    Sheets("Sheet1").Unprotect    Sheets("Sheet1").Buttons("Button 3").OnAction = "ShowMessage"    Sheets("Sheet1").ProtectEnd Sub
  5. 以下のイベントを標準モジュールに追加します。

    ' ボタンをクリックした際のイベント用のプロシージャSub ShowMessage()    MsgBox (Application.Caller)End Sub
  6. Visual Basic Editor から Excel に戻ります。
  7. [開発] タブの [挿入] をクリックし、"ボタン (フォーム コントロール)" を挿入します。
  8. [マクロの登録] で [新規作成] をクリックします。
  9. Visual Basic Editor に切り替わり、標準モジュールに以下のマクロを入力します。
    Sub ボタン2_Click()    Sheets("Sheet1").Unprotect    Sheets("Sheet1").Buttons("Button 3").OnAction = ""    Sheets("Sheet1").ProtectEnd Sub

  10. Visual Basic Editor から Excel に戻ります。
  11. [開発] タブの [挿入] をクリックし、"ボタン (フォーム コントロール)" を挿入します。
  12. [マクロの登録] で [キャンセル] をクリックします。
  13. [ファイル]、[名前を付けて保存] を順にクリックし、"ファイルの種類" では "Excel マクロ有効ブック (*.xlsm)" を選択し、任意の名前を付けて保存します。
    ここでは、例として Test1.xlsm として保存します。
  14. Excel を終了します。
  15. 再度 Excel を起動します。
  16. Test1.xlsm を開きます。
    セキュリティの警告が表示される場合は、[コンテンツの有効化] ボタンをクリックします。
  17. "Sheet1" 上の [ボタン 1] および [ボタン 2] にマウス カーソルを当てると、"指マーク" のカーソルになっていることを確認します。
  18. "Sheet1"上の [ボタン 3] にマウス カーソルを当てると、十字が付加されたカーソルになっていることを確認します。
  19. "Sheet1" 上の [ボタン 1] をクリックします。
結果 : [ボタン 3] にマウス カーソルを当てると、"指マーク" のカーソルになっておらず、矢印の形状となります。

上記の手順で発生した現象を回避するには、以下の手順を実行します。

  1. Test1.xlsm が開いている場合は、保存を行わずにいったんファイルを閉じます。
  2. 再度、Test1.xlsm を開きます。
    セキュリティの警告が表示される場合は、[コンテンツの有効化] ボタンをクリックします。
  3. [開発]、[Visual Basic Editor] を順にクリックします。
  4. 以下のマクロを標準モジュールに追加します。

    Sub dummy()End Sub
  5. Visual Basic Editor から Excel に戻ります。
  6. [ボタン 3] を右クリックして表示されるショートカット メニューより [マクロの登録] をクリックします。
  7. [マクロの登録] で "dummy" を選択し、[OK] をクリックします。
  8. Test1.xlsm を上書き保存します。

    注意 : "Sheet1" 上の [ボタン 2] をクリックし、[ボタン 3] に割り当てた OnAction プロパティを削除しても、[ボタン 3] のマウス カーソルは "指マーク" のままとなります。
プロパティ

文書番号:2433804 - 最終更新日: 09/29/2016 15:43:00 - リビジョン: 3.0

Microsoft Excel 2010

  • kbharmony kbexpertiseinter kbexpertiseadvanced kbtshoot KB2433804
フィードバック
ment.getElementsByTagName("head")[0].appendChild(m); PV = 0; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("