Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1601 / 13644 ツリー ←次へ | 前へ→

【73117】参照設定解除後のマクロが見つかりません対処方法について やまぐち 12/11/16(金) 15:59 質問[未読]
【73140】Re:参照設定解除後のマクロが見つかりませ... ichinose 12/11/20(火) 6:08 発言[未読]
【73187】Re:参照設定解除後のマクロが見つかりませ... やまぐち 12/11/26(月) 11:15 発言[未読]
【73216】Re:参照設定解除後のマクロが見つかりませ... ichinose 12/12/1(土) 6:01 発言[未読]
【73210】Re:参照設定解除後のマクロが見つかりませ... やまぐち 12/11/30(金) 14:47 お礼[未読]

【73117】参照設定解除後のマクロが見つかりません...
質問  やまぐち  - 12/11/16(金) 15:59 -

引用なし
パスワード
   作業効率化の為、VBAマクロのアドイン化にチャレンジしています。
以前、質問した際にご教授して下さった方、有難う御座いました。

ついては、
参照設定とアドイン関連について新規の質問をさせて下さい。
(いろいろ調査したが、ギブアップ状態)


【質問テーマ】
VBA参照設定を解除後にアドイン組込しても、アドイン機能が動作しない事への対処方法
(マクロ'xxxx'が見つかりません ★エラーが出る事がある)


【VBA実装と使用方法のイメージ】
□アドインファイル
  ''コマンドボタン
 Sub OnMenuButton() 
   .OnAction = "OnBookBak"
 End Sub

  ''アクティブブックを日時付の別名で退避
 Sub OnBookBak()
   xx(1) = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
   xx(2) = ActiveWorkbook.Path & "\" & 日付付ファイル名
   myFSO.CopyFile xx(1), xx(2)
 End Sub
 
   ''共通化が可能な処理論理
 Sub On条件読込()
   For ix_cnt1 = ...                                  
     共通の行列仕様である条件シート(アクティブBookに存在)から
     アクティブBook毎に異なるセル値を変数設定する。
       wk_jk(ix_cnt1) = ...
   next ix_cnt1
 End Sub

□Book11.xls
  ・当ブックは固有マクロ機能を持たない。が
  ・アドイン機能を使用したい(OnBookBakのみ)
  ・手動にてアドインチェックし活用している

□Book22.xls
  ・当ブックは固有のマクロ機能を持つ。
  ・固有マクロからアドイン機能を呼出し活用する(On条件読込)
    Workbooks(アドイン).Application.Run On条件読込
    VBAAddIns1.wk_jk(..)で変数参照
  ・他のアドイン機能もそのまま使用したい(OnBookBakのみ)
  ・参照設定とアドイン組込・・・質問テーマ箇所


【質問テーマ詳細】
Book22.xlsは、
VB参照設定(References.AddFromFile)にてアドイン機能(On条件読込)を呼出し活用してて、
ブック作業が終わった際は、ブック保存と別名退避してからブックを閉じようとしています。

ブック保存と退避は、参照設定を外した状態で行いたいので<<理由>>、
参照設定解除(.References.Remove)し、
アドイン組込(AddIns.Installed = True)し、
アドイン機能(OnBookBak)を動作させようとしています。が ここで★エラーとなります。

さらに、★エラーが発生する操作条件に次が加わります。
 ・参照設定解除後のアドイン組込後に動作させたいアドイン機能(OnBookBak)を
  参照設定している状態で動作実績がある場合。

 <<理由>>
  参照設定を残してBook保存すると、文書複製後の活用時やアドイン改版時で誤動作する
  のではと気持ちが悪いので、解除してから保存したいのです。個人のコダワリです。


【質問点】

1.エラー発生時は次の様な症状が起こっているのですか?
 .OnAction = "OnBookBak" では
 マクロ実行時にパスが何処かに記録されてしまい、参照設定解除したら認識できなくなる。
 (因みに、"OnBookBak"の前にアドインファイルのフルパス付けてもエラー再現しました)

2.1.YESの場合
 どこに記録されているのですか?
 また参照や変更は可能でしょうか?

3.エラー回避の方法論は何かあるでしょうか?


以上、宜しくお願い致します。

【73140】Re:参照設定解除後のマクロが見つかりま...
発言  ichinose  - 12/11/20(火) 6:08 -

引用なし
パスワード
   おはようございます。
投稿を拝見して・・・、


1 問題になっているエラーに閲覧者を導ききっていない事

閲覧者が、この問題のエラーにたどり着くまでの再現手順書がほしいのです。
Referencesを使っているのなら、「VisualBasicプロジェクトへのアクセスを信頼する」にチェックを入れ、セキュリティを下げなければ作動しないので(Excel2002以降)、
この記述から始めて、アドイン側のコード、呼び出し元のブックのコード 、

それから、エラーに到達するまでの操作手順・・・、エラー時のコード箇所とエラー内容

又、コードは、抱えているコードを全部載せるのではなく、掲示板用にエラー再現ができる簡潔なコード(エラーまでたどり着けるコード)を作成し、提示することが必要です。


2 Vbprojectを使用している事


1でも記述Hしましたが、Referenceを扱うには、セキュリティを下げなければ作動しませんよね?

このプログラムを使うユーザーは、その危険性を十分理解できているのでしょうか?
又、セキュリティを下げてまで参照設定・解除を行う必要があるのか?
最初から、参照設定しない運用で検討できないのか?

私は、Vbprojectの操作は、VBAプログラマのためのコード作成ツールぐらいしか
今のところ是認できませんが・・。


3 Reference操作について
 
Vbprojectを操作して、参照設定及び、解除を行うと対象プロジェクトは、初期化されます。
それまで設定されていたモジュールレベルの変数などは、初期化されてしまいます。
この点は、確認済みですか?


以上、気になった点を記述しました。

【73187】Re:参照設定解除後のマクロが見つかりま...
発言  やまぐち  - 12/11/26(月) 11:15 -

引用なし
パスワード
   有難うございます。
さて、ご指摘の3点についてですが、私の見解を述べさせて頂きます。


1 問題になっているエラーに閲覧者を導ききっていない事

私の表現力レベルが至らなかったとしたらご了承下さい。

ただ、掲示版へのベストな記述方法が一つしかないとは限りませんし、
伝達しきれない事があった際は、概要レベルではなく局所化していきながら
情報交換する事が情報共有の点で望ましいと考えております。

今回は次の様に情報を整理し、聞きたい点がブレないようにする事、
再現シミュレーションをして下さる方がいたならば、と、
アドイン側、呼出元ブックの参考コードを簡略(全コードではない)に記載したつもりです。
今一度確認して頂きたいと思っています。

【質問テーマ】
【VBA実装と使用方法のイメージ】
【質問テーマ詳細】
【質問点】


2 Vbprojectを使用している事

セキュリティ、危険性の理解度、参照設定・解除を行う必要性有無は、
作業効率を向上させる為の望ましい実現手段として検討試行錯誤した結果です。

現状は、マクロ使用は業務契約の条件となり得るケースは無く、グループ内部での使用に限られ、
全社的なセキュリティー運用、文書構成管理運用、マクロ使用時のリスク周知も考慮しています。

さらに、マクロ知識レベルを自覚しつつ、
参照設定を用いないで実現する手段の発見など、進化への試みも継続すべき事でしょう。
同時に、その時々の実現レベルで目的を達成させるアプローチも間違いではないと思います。


3 Reference操作について

参照設定解除を行うと対象プロジェクトは初期化される事は承知しており、
これを前提としたマクロ実装しています。

【73210】Re:参照設定解除後のマクロが見つかりま...
お礼  やまぐち  - 12/11/30(金) 14:47 -

引用なし
パスワード
   VBA参照設定を解除後にアドイン組込しても、アドイン機能が動作しない事への対処方法
について、暫定的ではありますが、手段がありましたのでコメントします。


【暫定対処】
アドイン側のプロシジャーに引数を設ける

【アドインコード例】
 Sub OnMenuButton()
   .OnAction = "OnBookBak"    ・・・×変更前
   .OnAction = "'OnBookBak""""'" ・・・●変更後
 End Sub

 Sub OnBookBak()            ・・・×変更前
 Sub OnBookBak(ByVal cc_par1 As String)・・・●変更後
   myFSO.CopyFile xx(1), xx(2)
 End Sub
 
【見解】
参照設定状態でOnBookBakを一度動作させた後、
参照設定解除しアドイン有効化状態でOnBookBakを動作する時、
(マクロ'xxxx'が見つかりません)エラーとなるケースは、
引数無プロシジャーで再現し、引数有プロシジャーでは再現してませんでした。

なぜ、再現性に差があるのか根本原因は分かりませんが、
今回質問は上記の暫定対処によりクローズさせて頂きます。

分かりにくい点、ルール違反など有った点は反省しております。
今後もVBA知識向上を継続していくつもりですので、
新たな疑問点があった際は、またご教授よろしくお願い致します。

有難う御座いました。

【73216】Re:参照設定解除後のマクロが見つかりま...
発言  ichinose  - 12/12/1(土) 6:01 -

引用なし
パスワード
   おはようございます。
返信が送れました。解決されたようですが・・・。

>>2 Vbprojectを使用している事
>作業効率を向上させる為の望ましい実現手段として検討試行錯誤した結果です。
これが気になっています。

私もVBAコード編集ツールとしては、Vbprojectを操作します。
参照設定ならば、複数ブックの一括参照設定や解除、
VBAコード作成後のコードのエクスポート処理など。
が、使用者にはExcelのセキュリティを下げたら必ず、元に戻すことを義務付けています。
又、処理対象となるブック自体が売り物となるVBAコードを含んだExcelブックですから、
上記のような処理後には、出力データであるVBAコードを含んだ売り物ブックは、
原則デバッグされます。


一般的な処理を行うVBAコード内でVbprojectを操作するコードを
この掲示板で10年以上お世話になっていますが、見かけた事がありません。

又、そのような投稿があると、その手法自体が問題になります。

私も自作したアドインブックは、作成し、利用しています。

アドインには汎用プログラムを作成し、
使用するブック側では、参照設定を事前に行って使用することも頻繁にあります。
これは、アドイン内に作成したクラス(オブジェクト)のイベントを利用したい時には、
どうしても必要になります

これを参照設定をしないでという仕様にしろ といわれても、
コード内で参照設定・解除なんて仕様には
間違ってもしないと思います


参照設定をしなくてもアドイン側で準備をしておけば、
アドイン側のプログラムの実行やデータ参照は、可能だということを

www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=72807;id=excel

ここで投稿しましたが、

>いずれ拡張性や保守性が低下してしまう懸念があります。
と仰られました。

Vbprojectを操作する事を考ると、保守性が低下なんてもっと心配ですけどねえ
先に述べたようにVbProjectに関しては、色々な事情から、殆ど議論されていないのです。

何処にバグが隠れているかわかりません。そうでなくてもバグの多い言語なのに・・。


Vbprojectの操作は、再度検討されてみては?


ただ、それでも

「VBA参照設定を解除後にアドイン組込しても、アドイン機能が動作しない事への対処方法」

という内容は、原因はなんだろうというところは、
ちょっと興味がありました。
でも、前述したとおり、処理プログラム内でVbprojectを操作して、
参照設定して処理、処理後参照設定解除 なんて発想は私にはありません。
記述された内容では、エラーが再現できないので、

>>問題になっているエラーに閲覧者を導ききっていない事

と投稿しました。

>掲示版へのベストな記述方法が一つしかないとは限りません

エラーが出て困っている という質問で エラー再現手順書を記述する
より、よい投稿って何ですか?

勿論、やまぐちさんがここでクイズでも出すつもりで
わざと曖昧にしているというのなら
記述方法が一つしかないとは限りませんは、そうでしょうねえ!!

問題解決には、エラー再現手順書を記述するは欠かせないと思っています。


但し、再現手順が元々はっきりしないという事象はありますよね?
この場合でも出来る限り、使用したコードとおぼろげながらでも
実行手順を記述します。

これは、必要だと思いますよ!!

1601 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free