- ベストアンサー
Excelマクロ:用紙の縦/横に連動してマクロボタンの凹凸も制御したい
- Excelマクロを使って、用紙の縦/横に連動してマクロボタンの凹凸を制御する方法について教えてください。
- Word2003で「用紙の向きを90度回転する」マクロを使って、ツールバーボタンに割り付け、紙を横にしたらツールバーボタンが凹み、紙を縦に戻したらツールバーボタンの凹みが元に戻るようにしたいです。
- 現在の実装では、ボタンを押して紙を横にしてボタンを凹ませ、Wordを再起動すると、紙が横でないのにボタンを凹んだ状態で新規文書が起動してしまいます。改善方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> マクロが見つからないか、またはマクロに対する > セキュリティ レベルが高く設定されているため > マクロが無効にされています。 この件に付きましては、#3で既に説明されていますが、 http://www.patent-boy.com/products/faq/faq.cgi?mode=view&no=3 「オプション」の設定が読まれるように設定されていないものだと思います。 ユーザーテンプレート: >場所:C:\Documents and Settings\(ユーザー名)\Application Data\Microsoft\Templates それと、 ツール--マクロ--セキュリティ--信頼できる発行元[タブ] レ 組み込み済みのアドインとテンプレートをすべて信頼する(A) ここにチェック マイクロソフト側の説明(上記と重複します) 起動または Word 2002 を終了すると「このプロジェクト内のマクロは無効」のエラー メッセージ http://support.microsoft.com/kb/302632/ja OSは、XPでも、Vista でも通りますし、これに関しては、管理者権限自体は関係なかったはずです。もしも、これでも出来ないような状態というのは、こちらでは分かりませんが、Office 2000などバージョンが低い場合を除いては考えられません。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >ところが、紙を横にしたままWordを閉じると、再度Wordを起動した際に >紙は縦、ボタンは凹んだ状態になっています。 >紙は縦、ボタンは凹んでいない状態になって欲しいところなのですが・・・ Normal.dot のThisDocument に#4で書かれたコードが書かれていれば、そのような問題は発生しないはずです。おそらく、ThisDocument 側のすべてのマクロが生きていません。 '=======#4のThisDocument 用マクロ========= 'コメント部分は、特に残す必要はありません。 '------------------------------------------- 'ThisDocumentのみ (同名のものがあれば、上書き) '------------------------------------------- Private Sub Document_Close() ・ ・ ・ ---------------------------------------- 試しに、この中のひとつに、以下のように書き加えれば働いているか分かります。★ Private Sub Document_Open() 'ファイルを開くと反応します。 Set myApp = Application Call wdOrientationChecker MsgBox "起動しました。" '★←これを書き込んでみれば、起動しているか分かります。 End Sub '------------------------------------------- ★不要になりましたら、削除してください。
お礼
Wendy02さん、毎度丁寧なご回答大変ありがとうございます。 御礼と動作確認報告が遅れ勝ちで申し訳なく思っております。 VBEで、左ペインのプロジェクトツリーで、 Normal→Microsoft Word Objects→ThisDocument に、#4のコードを貼り付けてみました。 実行した結果(ツールバーのOrientationボタン押下)は、相変わらず マクロが見つからないか、またはマクロに対する セキュリティ レベルが高く設定されているため マクロが無効にされています。 です、、、。 #5でお示しいただいた、 > Private Sub Document_Open() 'ファイルを開くと反応します。 (以下略) …これを加えて保存しようとすると、 コンパイル エラー: 名前が適切ではありません: Document_Open となります。・・・何かまたまた初歩的なミスをしておりますでしょうか??
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 今回のWord VBAは、一般的なマクロの基準からは、1ランクか2ランク上のものですから、インターネットで調べても、資料が出てこないと思います。SearchbuttonRev()の結果を見せていただいて、本来、ボタンのマクロを再登録していただく必要があったようです。早めに気がついていれば、それを直すマクロを提供していましたが、元のボタンの登録場所に、マクロを上書きしてしまうのが早いと思います。 これを参考に設定をしました。 '------------------------------------------- References >Menu: MyToolbar >ButtonName: Orientation >登録マクロ: NewMacros.Orientation >場所:C:\Documents and Settings\(ユーザー名)\Application Data\Microsoft\Templates\Normal.dot '------------------------------------------- VBE Normal.dot の中に、以下のものを貼付けし直してください。 なお、上記の情報から、Module1ではなく、NewMacrosになっているようですから、そちらを生かし、Module1の同様のものは削除してしまって構いません。 'コメント部分は、特に残す必要はありません。 '------------------------------------------- 'ThisDocumentのみ (同名のものがあれば、上書き) '------------------------------------------- Private WithEvents myApp As Application '←最上部 Private Sub Document_Close() Call wdOrientationChecker(False) End Sub Private Sub Document_New() Call wdOrientationChecker(False) End Sub Private Sub Document_Open() Set myApp = Application Call wdOrientationChecker End Sub Private Sub myApp_WindowActivate(ByVal Doc As Document, ByVal Wn As Window) Call wdOrientationChecker End Sub '------------------------------------------- ''NewMacrosのみ--上書き(Module1 にあった同名のマクロは残さず削除してください。) '------------------------------------------- Sub Orientation() Dim MyButton As Office.CommandBarButton Set MyButton = Application.CommandBars.ActionControl With MyButton If .State = msoButtonUp Then With ActiveDocument.PageSetup .Orientation = wdOrientLandscape End With .State = msoButtonDown Else With ActiveDocument.PageSetup .Orientation = wdOrientPortrait End With .State = msoButtonUp End If End With Set MyButton = Nothing End Sub Sub wdOrientationChecker(Optional flg As Boolean = True) '文書の向きをチェックするマクロ Dim MyButton As CommandBarButton Set MyButton = Application.CommandBars("MyToolbar").Controls("Orientation") If flg Then If ActiveDocument.PageSetup.Orientation = wdOrientLandscape Then MyButton.State = msoButtonDown Else MyButton.State = msoButtonUp End If Else MyButton.State = msoButtonUp End If End Sub '-------------------------------------------
お礼
Wendy02さん、完全におんぶに抱っこになってしまいまして心苦しい限りです。 本当にありがとうございます。 おかげさまで、無事既存環境で回転はさせられるようにはなりました。 ところが、紙を横にしたままWordを閉じると、再度Wordを起動した際に 紙は縦、ボタンは凹んだ状態になっています。 紙は縦、ボタンは凹んでいない状態になって欲しいところなのですが・・・ 元質問と同じ状態に陥っているようです。 せっかくここまで突き詰めていただいたので、念のためご報告させていただきます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 情報取得マクロを修正しました。今回は、特に修正する必要はありません。ただ、単に確認のためだけです。 私自身も、これで取ってみて、気がつかない部分がありました。私のNormal.Dot は、以下の「ユーザーテンプレート」にあります。一旦、設定すれば、変更なければ、いじる必要はありません。大変だと思いますが、全体のマクロがこういう面倒な設定になる可能性があると思ったほうがよさそうです。 '------------------------------------------- Sub SearchbuttonRev() 'ボタンを探すプログラム(修正版) Dim MyButton Dim a, b, c, d, e, v Set MyButton = Application.CommandBars On Error Resume Next For Each c In MyButton For Each v In c.Controls If Err.Number = 0 Then '設定マクロ名:大文字・小文字の区別あり a = v.OnAction Like "*Orient*" Err.Clear If a = True Then b = v.Parent.Name c = v.Caption d = v.OnAction e = v.Parent.Context MsgBox "Menu: " & b & vbCrLf & "ButtonName: " & c & vbCrLf & _ "登録マクロ: " & d & vbLf & "場所:" & e, , "情報メニュー" 'Debug.Print "Menu: " & b; "ButtonName: " & c & "登録マクロ: " & d & vbLf & "場所:" & e Exit Sub End If End If Next Next End Sub '------------------------------------------- >「マクロが見つからないか、またはマクロに対するセキュリティ レベルが高く設定されているためマクロが無効にされています。」 この件は、私は経験がありませんので、以下をみていだだけますか? http://www.patent-boy.com/products/faq/faq.cgi?mode=view&no=3 この内容自体は、私の考えているスタイルと違いますので、オプションの内容を確認してください。 だいたいは以下のようになると思います。[:]の右が空白なのは、私は空にしています。 なお、修正したマクロで情報を確認してください。 '------------------------------------------- Document and Setting... の部分が隠れていますが、 例えば、以下のような場所になります。 ------------------------------------------- 文書: 任意 クリップアート: ユーザーテンプレート: C:\Documents and Settings\[User ID]\Application Data\Microsoft\Templates ワークグループテンプレート: 自動バックアップ:任意 ツール: C:\Program Files\Microsoft Office\OFFICE11 スタートアップ: C:\Documents and Settings\[User ID]\Application Data\Microsoft\Word\STARTUP\ ------------------------------------------- ========================================= なお、これが通りましたら、今のスタイルには、Windows.Activate(ドキュメントを切り替えた時にチェックするモード)がありませんので、コードを加えなくてはなりません。 'ThisWorkbook モジュール '------------------------------------------- Private WithEvents myApp As Application '一行目 >Private Sub Document_Open() > Call wdOrientationChecker >End Sub ↓ Private Sub Document_Open() Set myApp = Application '←書き加えます Call wdOrientationChecker End Sub '------------------------------------------- '新たなイベント・ドリブン型マクロ(ThisDocument の最後尾に加える) Private Sub myApp_WindowActivate(ByVal Doc As Document, ByVal Wn As Window) Call wdOrientationChecker End Sub
補足
Wendy02さん、たびたびのご教示感謝にたえません。 また、とっくに試してはいたのですが、下記に示すトラブルで解決策がないか いろいろ試しておりました、結果的に報告や御礼が遅くなりましたことをお許しください。 No3でご教示いただいたマクロなど、整理すると文末のようになるかと思います。 これを、Normal.dotのNewMacrosに貼り付けると、 >Private WithEvents myApp As Application '一行目 ここが赤字になります。 Project(文書1)のThisDocumentに貼り付ければ赤字になりませんが・・・。 Normal.dotでも、ThisDocumentでも、いずれにせよツールバーボタン (=「Orientation」をキャプションとするボタン)を押下すると 相変わらず「マクロが見つからないか、またはマクロに対するセキュリティ レベルが高く設定されているためマクロが無効にされています。」となります。。。。 Wendy02さんが#3でご教示くださったサイトもみてみたのですが・・・ そうそう、#3のスクリプト実行結果は以下の通りです。 Menu: MyToolbar ButtonName: Orientation 登録マクロ: NewMacros.Orientation 場所:C:\Documents and Settings\(ユーザー名)\Application Data\Microsoft\Templates\Normal.dot '------------------------------------------- 'Normal.dotの標準モジュールか、ThisDocument どちらでも良い Private WithEvents myApp As Application '一行目 Sub wdOrientationChecker(Optional flg As Boolean = True) '文書の向きをチェックするマクロ Dim MyButton As CommandBarButton Set MyButton = Application.CommandBars("MyToolbar").Controls("Orientation")' 'ここはキャプションにあわせて変更済みです。 If flg Then If ActiveDocument.PageSetup.Orientation = wdOrientLandscape Then MyButton.State = msoButtonDown Else MyButton.State = msoButtonUp End If Else MyButton.State = msoButtonUp End If End Sub 'Normal.doct のThisDocument Private Sub Document_Close() Call wdOrientationChecker(False) End Sub Private Sub Document_New() Call wdOrientationChecker(False) End Sub Private Sub Document_Open() Set myApp = Application '←書き加えます Call wdOrientationChecker End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >Word2003のツール→ユーザー設定→コマンドタブ→「分類」の「マクロ」に >wdOrientationCheckerが出てきません、、、 ドキュメント側から呼び出して使うものではありませんから、出てきません。 >早速当方のVBEで、Normal.dotの標準モジュールのNewMacros(ここに他の細かいマクロも入れてあります)に加える形で組み込んでみたんですが、 Normal.doct のNewMacros でも構いませんが、ともかく、ボタンがどう張付ているか分かればよいのですが。 大事なことは、ここだけです。 >「表示のCaption に名称を合わせる」ということの意味がわからないのですが、 >そちらを設定していないのが原因でしょうか。 図をみてください。私のところでは、Orientation と出ています。これが、キャプション(Caption)です。 以下のプログラムで、検索してみてください。 Menu ---> Menu Bar ButtonName(Caption)--> Orientation メッセージボックスに出てきたものは、イミディエイトウィンドウにも出ていますので、それを、#1のマクロの以下の行を書き換えてください。 Set MyButton = Application.CommandBars("Menu Bar").Controls("Orientation") '要変更 '------------------------------------------- 'どこでもよいので、試してみてください。 Sub Searchbutton() 'ボタンを探すプログラム Dim MyButton Dim a, b, c, v Set MyButton = Application.CommandBars On Error Resume Next For Each c In MyButton For Each v In c.Controls If Err.Number = 0 Then '設定マクロ名:大文字・小文字の区別あり a = v.OnAction Like "*Orient*" Err.Clear If a = True Then b = v.Parent.Name c = v.Caption MsgBox "Menu: " & b & vbCrLf & "ButtonName: " & c Debug.Print "Menu: " & b ; "ButtonName: " & c Exit Sub End If End If Next Next End Sub '------------------------------------------- 不要になったら削除して良いです。
お礼
Wendy02さん、たびたびのご教示大変ありがとうございます。 初歩的な質問に丁寧にご教示いただき感謝に耐えません。 Searchbutton()を実行してみましたら、 Menu ---> My Toolbar ButtonName(Caption)--> 用紙を90度回転 と出てきましたので、以下のように設定しました。 Set MyButton = Application.CommandBars("My Toolbar").Controls("用紙を90度回転") '要変更 既存のボタンを押下してみましたら、 「マクロが見つからないか、またはマクロに対するセキュリティ レベルが高く設定されているためマクロが無効にされています。」 というメッセージが出て、用紙が90度回転されません。 些細な設定ミスかもしれませんが・・・
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ここでは、ボタン名を、Orientation にしていますが、 Set MyButton = Application.CommandBars("Menu Bar").Controls("Orientation") '要変更 表示のCaption に名称を合わせてください。また、Menu Bar ではなく、別の場所に入れている場合は、正しい場所に設定してください。ただ、正しい場所が見つからない場合は、検索用のマクロを別途作らなくてはなりません。 '------------------------------------------- 'Normal.dotの標準モジュールか、ThisDocument どちらでも良い Sub wdOrientationChecker(Optional flg As Boolean = True) '文書の向きをチェックするマクロ Dim MyButton As CommandBarButton Set MyButton = Application.CommandBars("Menu Bar").Controls("Orientation") '要変更 If flg Then If ActiveDocument.PageSetup.Orientation = wdOrientLandscape Then MyButton.State = msoButtonDown Else MyButton.State = msoButtonUp End If Else MyButton.State = msoButtonUp End If End Sub '------------------------------------------- 'Normal.doct のThisDocument Private Sub Document_Close() Call wdOrientationChecker(False) End Sub Private Sub Document_New() Call wdOrientationChecker(False) End Sub Private Sub Document_Open() Call wdOrientationChecker End Sub
お礼
Wendy02さん、早速のご回答ありがとうございます、 早速当方のVBEで、Normal.dotの標準モジュールのNewMacros(ここに他の細かいマクロも 入れてあります)に加える形で組み込んでみたんですが、 Word2003のツール→ユーザー設定→コマンドタブ→「分類」の「マクロ」に wdOrientationCheckerが出てきません、、、 うう、初歩的な質問ですみませんが、なぜでしょう? ツールバーにボタンがのっけられません。。。 それと、 > ここでは、ボタン名を、Orientation にしていますが、 > Set MyButton = Application.CommandBars("Menu Bar").Controls("Orientation") '要変更 > 表示のCaption に名称を合わせてください。 「表示のCaption に名称を合わせる」ということの意味がわからないのですが、 そちらを設定していないのが原因でしょうか。 #すみません、元質問のマクロも詳しい人に聞いたり ネットの記事を参考にしたりで何とか作ったもので マクロの考え方があまりよくわかっていなくてすみません。
お礼
Wendy02さん、毎度御礼が遅くなって大変失礼しております。 ご教示の点は一から何度も点検しているのですが どうしても不具合が取れません。。。。 既に材料は揃えていただきましたので 腰をすえてじっくり適用し、成功できるようにしたいと思います。 親身になって様々なご回答、本当にありがとうございました。 今後ともよろしくお願い致します。