Question 002p メッセージ 拙著「組み方講座・プロの定番」 Previous Next
332ページ 5章1-2 合わせ技(3) ◆ 環境・・ Excel 97 & Windows XP
詳細は こちら
標準モジュールの Assistant.On のOn のところでコンパイルエラーが出てしまいます。
Answer   Copyright (C) 2005.2.15 Yoshioh Nagai
拙著「ExcelVBAマクロ組み方講座 プロの定番・裏技・合わせ技[編]」をご購読、ありがとうございます。
5章1-2 合わせ技(3)は、「右クリックでセル移動方向設定用ショートカットメニューを表示する」と 題するBeforeRightClickイベントのサンプルで、セルを右クリックすると
左図のメニューが表示され、それをクリックすると右図のバルーンが表示されるので、入力後にセルを移動する方向を簡単に変更できるようになります。


このサンプルを
Excel 97で実行すると、中央図のようなエラーになってしまうが というご質問ですね。

対応策としましては、(標準)モジュールの一部を、下記のようにコメント行に変更するか、削除してから実行してください。
(上から 2~3行目)
Private Sub セル移動方向を設定する()
アシスタント使用状態 = Assistant.On
If Not Assistant.On Then Assistant.On = True
(下から 2行目)
Assistant.On = アシスタント使用状態
End Sub

エラーになる原因ですが、Excel 97と 98(Mac版)には、Onプロパティ(アシスタントの使用状態を制御する)がないためです。 Excel 2000以上および Mac版の2001以上ではエラーになりません。 バージョン対応の本書での解説が十分でなく、ご迷惑をお掛けしました。申し訳ございません。
このことは Support ページにても公開させていただきます。よろしくお願いします。
追加質問
コンパイルエラーが出なくなることを確認いたしました。
(1) しかし、動作は何も変化ありませんでした。
(2) この例題はバルーンのボタンを選択するとアクティブセルが移動するのが目で確認できるのでしょうか?
(3) また、コメントにした行は何をしているのか説明願いませんでしょうか?
やはり、xl97が原因でしょうか?それなら諦めます。
Answer   Copyright (C) 2005.2.17 Yoshioh Nagai
エラーが解消しましたね。 お手数をお掛けしました。
その後で、「RightClick」シートにある「動作確認のご案内」に沿って、任意のセルを右クリックして、表示されたショートカットメニューをクリックし、表示されたバルーンのラベルのどれか(上、下、左、右)をクリックしていただけましたね。

追加質問を 3ついただきましたので、順にお答えします。
(1)
上記の操作により、パソコンが何か動作するということはありません。
ユーザーがセルに値などをキーインして [Tab]または[Enter]キーを押したときに、Excelが(アクティブ)セルを移動する方向を設定するだけで、標準機能では右図に相当します。
(2)
5章1-2は 「Excelオブジェクトのイベントプロシージャ」の学習で、その中の「合わせ技(3)」は[BeforeRightClick]イベントについてですから、直接的には 331~332ページに跨る3つのマクロの内の下記部分だけになります。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    CommandBars("専用MENU").ShowPopup
    Cancel = True
End Sub
しかし、このようなサンプルでは実務に活かしたり応用しにくいので、本書掲載の裏技と合わせ技は実用例を使って学習を進めています。
よって、学習目的から言うと「BeforeRightClickイベントプロシージャ」が主、「セル移動方向設定」が従となります。 くれぐれも、バルーンのラベルを選択しただけでアクティブセルが移動するのではありませんから、ご理解ください。
(3)
コメントにした3行には Onプロパティがあり、これは前回の回答にもありますがアシスタントの使用状態を取得または設定でき、各行のコードは Excel 2000以上なら下記のとおり機能します。
アシスタント使用状態 = Assistant.On       … アシスタントの使用状態を取得する
If Not Assistant.On Then Assistant.On = True … アシスタントが使用可能状態でなければ可能にする
Assistant.On = アシスタント使用状態       … アシスタントの使用状態を復元する

よって、Excel 97でも主目的の方は機能しますし、従の方もアシスタントがインストールしてあれば諦めることはありません。 頑張ってお進めください。
ありがとうございました
1),2),3)にまとめて回答していただき、ありがとうございました。 例題の主従の関係も理解しました。
xl97で、コメント化しても、オプションのEnter後のカーソルの動きの変更ができていました。動作確認もできました。
これでこの例題についてはCloseできました。

Excel VBA Macro