Page 81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼標準モジュール・プロシージャを追加するには、 ぴかる 02/9/13(金) 21:48 ┗Re:標準モジュール・プロシージャを追加するには、 禰宜 02/9/14(土) 10:38 ┗Re:標準モジュール・プロシージャを追加するには、 ぴかる 02/9/14(土) 11:06 ┣Re:標準モジュール・プロシージャを追加するには、 通りすがりのななし 02/9/14(土) 11:18 ┃ ┗Re:標準モジュール・プロシージャを追加するには、 ぴかる 02/9/14(土) 11:38 ┃ ┗Re:標準モジュール・プロシージャを追加するには、 禰宜 02/9/14(土) 11:49 ┃ ┗Re:標準モジュール・プロシージャを追加するには、 ぴかる 02/9/14(土) 11:54 ┃ ┗Re:標準モジュール・プロシージャを追加するには、 禰宜 02/9/14(土) 13:40 ┃ ┗Re:標準モジュール・プロシージャを追加するには、 ぴかる 02/9/14(土) 14:19 ┃ ┣Re:標準モジュール・プロシージャを追加するには、 ぴかる 02/9/14(土) 15:28 ┃ ┃ ┗Re:標準モジュール・プロシージャを追加するには、 禰宜 02/9/14(土) 15:41 ┃ ┗Re:標準モジュール・プロシージャを追加するには、 禰宜 02/9/14(土) 15:38 ┃ ┗しばらくしたら、目安箱にて ぴかる 02/9/14(土) 16:18 ┃ ┗あ〜、勘違い。 ぴかる 02/9/14(土) 16:24 ┗Re:標準モジュール・プロシージャを追加するには、 禰宜 02/9/14(土) 11:39 ┗Re:標準モジュール・プロシージャを追加するには、 ぴかる 02/9/14(土) 11:49 ─────────────────────────────────────── ■題名 : 標準モジュール・プロシージャを追加するには、 ■名前 : ぴかる ■日付 : 02/9/13(金) 21:48 -------------------------------------------------------------------------
みなさま、こんばんは。 NEWピカつーるも完成したと思ったら、またまたつまずいてしまいました。 やりたい内容は、モジュールを削除して新たにダミーモジュール・プロシージャを追加したいんです。削除については、以前に教えて頂いたのでOKです。追加の方がもし可能であれば、教えて頂けないでしょうか?。SendKeysを使えば出来そうな気がするんですが、いまいちよう分かりません。よろしくお願い致します。 ↓を追加したいと思っております。 モジュール名 … ダミー プロシージャ名 … Sub 全メニュー表示 (中身無し) |
失礼いたします。 こなれていないコードですが、下記のような感じでもOK? Sub AAA() Dim MyModule As VBComponent Set MyModule = Application.VBE _ .ActiveVBProject.VBComponents.Add(vbext_ct_StdModule) MyModule.Name = "ダミー" MyModule.CodeModule.AddFromString _ "Sub 全メニュー表示" & Chr(13) & "End Sub" Set MyModule = Nothing End Sub ※VBProjectsについては、ActiveVBProjectではなく、 直接指定した方が良いでしょう。必要に応じて変更してください。 失礼いたしました。 |
禰宜さん、こんにちは。 無理ではないかと思っていてので自力でSendKeysでなんとかやってみました。 (もちろん、モジュール名の変更は無し、プロシージャ名はアルファベット) ありがとうございましたと言おうと思ったら、禰宜さんからのご回答があり感激しました。 >Dim MyModule As VBComponent 早速試させて頂きましたが、この部分でコンパイルエラーとなります。 よろしくお願いいたします。 |
▼ぴかる さん: 横レス失礼いたします。 >>Dim MyModule As VBComponent >早速試させて頂きましたが、この部分でコンパイルエラーとなります。 >よろしくお願いいたします。 「Microsoft Visual Basic for Application Extensibility」が参照設定に加えられていないときは、VBComponentというオブジェクト型は使えません(メンバ表示されない)。 解決方法 ●宣言方法を変更する Dim MyModule As Object ●参照設定を変更する Microsoft Visual Basic for Application Extensibility にチェックを入れる。 |
禰宜さん、通りすがりのななしさん、こんにちは。 ありがとうございます。早速、試させて頂きました。 > ●宣言方法を変更する > Dim MyModule As Object 次の箇所でエラーとなりました。 > ●参照設定を変更する > Microsoft Visual Basic for Application Extensibility にチェックを入れる。 うまく行きました。初めて参照設定を触りました。いっぱいありますね。まったく、わかりません・・・。^^; いろんなPC(97,2000)で汎用性を持たしたいと思っておりますので、設定を変更しなくても出来る方法がございましたらよろしくお願いいたします。 |
おやおや・・・。 ぴかるさんの発言と行き違いになってしまいました。 >設定を変更しなくても出来る方法 Sendkeyで送る方法でも良いかも知れませんが、 参照状況を確認して、参照していないなら参照するという コードを追加する方が良いでしょう。 |
>おやおや・・・。 >ぴかるさんの発言と行き違いになってしまいました。 またまたです。(^^;) >>設定を変更しなくても出来る方法 >Sendkeyで送る方法でも良いかも知れませんが、 >参照状況を確認して、参照していないなら参照するという >コードを追加する方が良いでしょう。 そのコードは、?。すみません。教えて下さい。よろしくお願いします。 (甘え過ぎかも?・・・。) |
失礼いたします。 Excel97,2000が対象であれば、下記のコードでOKですね。 Sub TEST() On Error Resume Next Ret = Application.VBE.ActiveVBProject.References _ .AddFromGuid("{0002E157-0000-0000-C000-000000000046}", 5, 3) Err.Clear End Sub 既に参照設定がされている場合のエラーは、 On Error で留保してErr.Clearで対応しています。 細かいエラー処理を組み込むのであれば、 参照出来ない場合 Err.Number = -2147319779 既に参照されている場合 Err.Number = 32813 を使って条件分岐させれば良いでしょう。 尚、参照設定がされていない状態で、ステップ実行された場合は、 Err.Number = 438 が返ります。 動作確認する時にはお気をつけください。 失礼いたしました。 |
禰宜さん、こんにちは。 何度もご丁寧にありがとうございます。もう少しだけ教えて下さい。 >Excel97,2000が対象であれば、下記のコードでOKですね。 すみません。2002でもOKですよね?。 >Sub TEST() >On Error Resume Next >Ret = Application.VBE.ActiveVBProject.References _ >.AddFromGuid("{0002E157-0000-0000-C000-000000000046}", 5, 3) >Err.Clear >End Sub 上記コード試させていただきました。うまく行きました。ありがとうございました。 >参照出来ない場合 >Err.Number = -2147319779 そういう場合は、少なからずあるのでしょうか?。出てしまうとあまり良くないものですから・・・。 細かいところで申し訳ないのですが、よろしくお願いいたします。 |
禰宜さん、こんにちは。 >Set MyModule = Application.VBE _ >.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule) 他の97PCでも試したところ、↑で「型が一致しません」とエラーが出ていまいました。 環境によってOK・NGになるようです。少し格好悪いですが、SendKeys版で行こうと思います。前回の質問に関しても何かありましたらよろしくお願い致します。この度は誠に色々とありがとうございました。大変、勉強になりました。今後ともよろしくお願い致します。 |
失礼いたします。 ごめんなさい。またダブりました。 うまくいくことをお祈り申し上げます。 |
失礼いたします。 >すみません。2002でもOKですよね?。 >そういう場合は、少なからずあるのでしょうか? 両方が関連しているのですが、 Microsoft Visual Basic for Application Extensibility のバージョンが違った場合に考えられます。 Excel97や2000は共にMajorが5、Minorが3だったと思うので 先述のコードで参照設定が可能です。 但し2002の場合、違う可能性もあるので・・・。 基本的に、既にあるモジュールやコードを削除したり、 モジュールを追加したりする作業はお勧めできません。 悪用すればウイルスと変わりませんから。 また、削除対象が何かの拍子にずれてしまうと、 使用者の他のマクロを削除してしまう可能性があります。 アドインなどで使う場合には対象BooKと自BooKとの関係を しっかりみておかないと大変なことになります。 また、SendKeyについても動作が安定していないので 環境によってエラーが起こる可能性は多分にあります。 SendKeyを使うにしても、参照設定で行うにしても 他の方に配布する場合、エラー処理はかなり重要です。 どんな必要性があって追加、削除をしたいのかが分かりませんが、 時間がかかっても、他の方法を考えることをお勧めします。 失礼いたしました。 |
禰宜さん、こちらこそ失礼いたします。 ご回答、ご丁寧にありがとうございます。 >どんな必要性があって追加、削除をしたいのかが分かりませんが、 >時間がかかっても、他の方法を考えることをお勧めします。 私も、削除・追加はあまりやりやくありません。下記マクロを有効にしたい為、取り組んだ次第です。これは、メニューバーの項目表示切替です。2000以上で有効の為、97ではエラーとなってしまいます。そこでその部分のモジュールを削除し、ダミーモジュールを追加すればOKと思い取り組みました。 CommandBars.AdaptiveMenus = False エラー処理については、メッセージが出る程度です。指定以外のモジュールは、削除しない様にしています。SendKeyに関しては、試して頂かないと分かりません。もう少ししたら、管理者の谷様にファイルを送ろうと思っております。しばらくしたら、目安箱にアクセスしてみて下さい。そして、是非ともお試し下さい。よろしくお願い致します。 |
禰宜さん、またまた失礼いたします。 あっ、97だけでよかったんだぁ〜。あ〜、勘違い。ポリポリ! (^^;) |
失礼いたします。 To 通りすがりのななしさん フォローありがとうございます。 To ぴかるさん Microsoft Visual Basic for Application Extensibility 5.3 への参照設定が必要です。 尚、Dim MyModule As Object だけの変更だと環境により エラーが出ますから、上記を必ず参照してください。 また、配布ツールとして提供する場合のことを考えると、 参照状況を確認するコードを追加しておく方が良いかも しれませんね。 失礼いたしました。 |
禰宜さん、通りすがりのななしさん、こんにちは。 お二人様、誠にありがとうございました。参照設定の変更が不可欠のようですね。 今回は、汎用性を持たせたいので自作SendKeysで行こうと思います。 よろしかったら、ピカつーるも見て下さいね。どうもでした。(^^) |