- ベストアンサー
エクセルのマクロからコメントの書式設定をしたいのですが・・・。
VBA初心者です。よろしくお願いします。昨日も同じ質問をしたのですが、誰にもお答えいただけなかったので、もう一度・・・。 今、プロテクトのかかっているシート上で、マクロからコメント作成、編集ができるようなプログラムを作っているのですが、マクロからコメントの書式設定ダイアログを表示させて、ユーザーが任意に書式を設定できるような仕様にしたいのですが、どうしたらよいのでしょうか? 詳しい方、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ご指摘のように、事前にコメントの書式設定のダイアログを出していないとこのマクロは動きませんでした。事前に他のBookでこのダイアログを出していればうまく動きました。 なぜ??? 以下は調べた結果です。多分に推測が入っています。(この辺が一般人の悲しさ!) オプション→ユーザー設定のコマンドタグの中の図形描写のコマンド『オブジェクト...』を使いたかったのですが、このコマンドの説明を読むと、 [図/オートシェイブ/オブジェクト/コントロール]([書式]メニュー) 選択した図、オートシェイブ、オブジェクトなどの線、塗りつぶし、パターン、 サイズ、位置、およびその他のプロパティを設定します。 選択した対象によって、コマンド名は変わります。 と書いてあります。(『選択した対象によって、コマンド名は変わります』が重要?)ということは、 最初に探しにいった時には『コメントの書式設定』というコマンドは無い状態だった というのが私の推測です。一旦出せば、『コメントの書式設定』というコマンドが実在することになる?? コマンドを名前で指定したのが問題(?)でした(多分) 対応策として myCmd.Controls(10).Execute 'コメントの書式設定を実行 としてみました。『10』は『オブジェクト...』のインデックスです(私のExcelですが) Excelを立ち上げて、最初に修正後のマクロを動かして動作確認はしました。 試しに修正してみて下さい。 また、使用される場合は、エラー処理部分を下記の様に修正して下さい。保護を解除したままでした。 MsgBox "コメントはありません" ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 色々、おさがわせしました。
その他の回答 (3)
- nishi6
- ベストアンサー率67% (869/1280)
myCmd.Controls("コメントの書式設定(&O)...").Execute を myCmd.Controls("コメントの書式設定(O)...").Execute と変えたらどうでしょうか。半角大文字のオー『O』です。 回答で『探している』と書いたのは、コメントを選択して右クリックして、プルダウンメニューの中に書かれている『コメントの書式設定・・・』の文字を正確に記入する必要があったからです。shige0517さんのPCで実際そのメニュー内の文字を確かめられてモジュールの中に書けばいいと思います。この回答は多分、『コメントの書式設定(O)...』ではないかとの推測で書いています。
補足
ありがとうございます。 う~ん、だめです。エラーがでてしまいます。 一度シートの保護を手動ではずして、右クリックでコメントの書式設定ダイアログを表示させ、また保護をかけて再びこのプログラムを実行すると正常に動くことがわかりました。 原因はまったくわかりません。 nishi6さん、おわかりになりますでしょうか?
- nishi6
- ベストアンサー率67% (869/1280)
再度の質問たいへんですね。深刻さが伝わった?のでちょっと考えてみました。 先に不明点を (1)コメントをSelectする場合、これをVisibleにする必要があると思います。 ・・・これはシートの設定次第なので、下記では、表示させて、編集が終われば非表示にしています。 (2)ユーザーが任意に設定とありますが、コメントの挿入、削除もあるのでしょうか。 ・・・これは不明なため設定してあるコメントのみ対応しています。 (3)そもそも、プロテクトがかかっているシートをユーザーが任意にイジッていい? ・・・これは不明点というより、疑問点ですね。 ・・・下記では、パスワード等のことは考慮していません。 普通にDialogs・・・.Showでは目的のダイアログは出ないと思います(?)ので、コマンドバーから探して(?)います。Excel2000で動作確認しました。Excel97とか他は不明です。 実際動かしてみての感想ですが、ショートカットキーに割り当てた方が処理しやすいようです。参考にして下さい。質問の意味と違うところがあれば補足して下さい。 標準モジュールに貼り付けます。 Sub CommentEdit() On Error GoTo ErrorHandler 'エラー対応(コメントがないセルで実行した場合) ActiveSheet.Unprotect '保護を解除 ActiveCell.Comment.Visible = True 'コメントを表示させる ActiveCell.Comment.Shape.Select 'コメントを選択 Dim myCmd As CommandBar 'コメントの書式設定を含むコマンドバー Set myCmd = CommandBars("Shapes") myCmd.Controls("コメントの書式設定(&O)...").Execute 'コメントの書式設定を実行 ActiveCell.Comment.Visible = False 'コメントを非表示にする 'シート保護。データ、オブジェクト、シナリオにチェック。パスワードなしで作成。(必要なら編集して下さい) ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Exit Sub 'エラー処理ルーチン(コメントがない!) ErrorHandler: Err.Clear MsgBox "コメントはありません" On Error GoTo 0 End Sub
お礼
お礼が送れて申し訳ありません。ご回答、ありがとうございました。参考になります。 ご不明の点ですが、 (1)は、nishi6さんのプログラムのような動きでいいのです。 (2)コメントの挿入、削除のプログラムはもうすでに他の機能としてつくってあります。ですから挿入されたコメントの書式をユーザーが任意に変えられるようにする機能を追加したい、ということです。 (3)これは、このプログラム自体、最初からウチの会社で作っていて、その追加機能としてコメントの書式設定をつけようということになったものなので、問題ありません。要は、そういう仕様なのです。 nishi6さんのプログラムですが、 myCmd.Controls("コメントの書式設定(&O)...").Execute 'コメントの書式設定を実行 のところでエラーが出てしまうようなのですが・・・。エクセルは2000です。 おそらくこのエラーが出る原因がわかれば、nishi6さんのプログラムが最善だと思うのですが。
- miya_777
- ベストアンサー率31% (44/140)
一番簡単な方法です。※不完全ですが 仮に、アクティブセルにコメントがある場合、 ActiveCell.Comment.Shape.Select Application.Dialogs(xlDialogFontProperties).Show とすれば、OKです。 ※不完全というのは、「フォント」のタグ分しか設定できません。 コメントの書式は、「フォント」「配置」「サイズ」「保護」「プロパティ」「余白」タブで構成されます。いろいろ調べましたが、ヘルプからはこれ以上解りませんでした。
お礼
お礼が遅れて申し訳ありません。ご回答ありがとうございます。 とりあえず、この方法でプログラムを制作しました。確かに「フォント」タグしか出ないですが、プロテクトのかかっていないシート上で普通に右クリックで書式設定ダイアログを表示させても同じなので、いいかな、と。 でもできれば他のタグも表示させたいですね・・・。 非常に助かりました。ありがとうございました。
お礼
度々ありがとうございます。 無事、エラーも出ず、解決いたしました! なんか凄いプログラムを作った気になります。はい。 本当に何回も、お世話になりました。 ありがとうございました。