Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
「.VBProject.VBComponents.Exort」でVBモジュールを書き出す時、アクセス拒否で処理が停止する
投稿日時: 22/06/10 17:51:32
投稿者: QooApp

いつもお世話になっております。
 
今回は、VBAの中でエクセルファイルに含まれる標準モジュールファイルをエクスポートしたとき、日頃マクロなどが実行されるような環境ではない別のパソコンで該当部分のソースコードがアクセス制限により停止してしまう問題の解決策として、VB内で設定可能か探しています。
 
問題に対する直接的な解決方法としては下記URL先マイクロソフト公式の回答から
https://support.microsoft.com/ja-jp/topic/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%8B%E3%82%89-office-vba-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%8C%E6%8B%92%E5%90%A6%E3%81%95%E3%82%8C%E3%82%8B-960d5265-6592-9400-31bc-b2ddfb94b445
 
ファイル>オプション>セキュリティセンター>セキュリティセンターの設定>マクロの設定
から、「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れることで手動での問題解決は可能であることがわかりました。
 
標準モジュールファイルをエクスポートする処理自体がファイルの自己増殖の可能性を示し、セキュリティが強制的にブロックしていることが原因とは分かったのですが、このエラーを表示させずに処理を正常に進める事は可能でしょうか。
 

'ブックと同階層に標準モジュール名のファイルをエクスポートする処理
ThisWorkbook.VBProject.VBComponents.Exort ThisWorkbook.Path & "\" & "標準モジュール名.bas"

投稿日時: 22/06/10 18:05:50
投稿者: QooApp

標準モジュールを書き出す処理を行い、あとから別ブックへ書き出したモジュールを取り込む処理を行うために上記のような回りくどいことを行っていました。
  
もしかしてですが、ブックを直接複製したら治るかもしれないのでその方向性でいったん調査してみます。

回答
投稿日時: 22/06/10 18:15:47
投稿者: taitani

私も過去同じ現象で悩まされたことありました。
(結局毎回手動であきらめた気がします)
 
もしかしたら、以下のページが参考になるかもしれません。
https://automationlabo.com/wat/?p=9402

投稿日時: 22/06/10 18:47:57
投稿者: QooApp

taitani様
 
いつもお世話になっております。コメントありがとうございます。
Bat対応もよさそうですね。
 
自分が使用する分にはエラーになってもかまわないのですが、PC操作に疎いユーザーに該当のシステムを一式渡す予定があり、そんなパソコンごとに手動で操作させるのは妥当だろうか・・・?と悩んでます。
 
いただいたリンク拝読させていただきます。
現状懸念が考えられるとしたら、使用するソフト環境が異なる(相手側が365だったり最新版オフィスだったり)の場合に正常にBatのリンクが取得できない可能性があるくらいでしょうか。
 
Excelのバージョン別に処理するのも中々面倒かなと思うのでExcelVBA側でアプリケーションのバージョンを取得、コマンドライン命令で使用するBatの種類を選択して起動する。
というような運用が望ましいかなあ。と考えております。

回答
投稿日時: 22/06/10 19:05:32
投稿者: taitani

Microsoft の資料を見ても、詳細について触れていないんですよね。。。
 
■Office ソリューション開発者向けのセキュリティの注意事項
 -->[自動編集Visual Basic]
https://docs.microsoft.com/ja-jp/office/vba/library-reference/concepts/security-notes-for-microsoft-office-solution-developers#automate-the-visual-basic-editor
 
なにやら、グループ ポリシー 的なことも踏まえないといけないにおいがします。
 
■How to enable or disable Trust access to Visual Basic Project in Office apps
https://www.thewindowsclub.com/enable-or-disable-trust-access-to-visual-basic-project-in-office-apps

投稿日時: 22/06/10 19:36:44
投稿者: QooApp

え、そこまで踏み込む可能性があるんですか?
ひえっ…。
 
今回は手動で変更するマニュアルで対応しようかと思います。
週明けに目立った成果が出なさそうであれば本件クローズします。
 
お忙しいところご協力ありがとうございます。非常に助かりました。

回答
投稿日時: 22/06/11 16:26:51
投稿者: MMYS

マクロウイルスはご存じないのでしょうか。
 

引用:

このセキュリティ オプションにより、許可されていないプログラムで、エンド ユーザーのシステムに問題を起こす可能性のある "自己複製型" コードが作成されにくくなります。

"自己複製型" コードって、ウイルスのことです。
 
Excelのセキュリティ設定と怪しいファイルの対策
https://thom.hateblo.jp/entry/2018/05/04/001347#4-VBA%E3%81%AB%E3%82%88%E3%82%8B%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E9%98%B2%E6%AD%A2
 
インターネットセキュリティの歴史 第4回 「Melissa ウイルス」
https://www.jpcert.or.jp/tips/2007/wr071701.html
 
 
手口は、マクロウイルスに感染したOfficeファイル(Excel・Wordファイル)を開くとエクスポート・インポート機能などで、ユーザーが作成したOfficeファイルにコードをコピー。ローカルファイルを感染させる。さらにOutlookで取引先にファイルを送信します。20年前の話。この経験から安易にメールを開くなって、警鐘されます。
 
マイクロソフトがとった対策が、実行時にコードの書き換えの制限。本来廃止の機能でしょう。
ただし、ユーザーがリスクを承知の上で、自らセキュリティを解除は用意されました。
 
当然、ユーザーの知らない内に(裏技で)セキュリティを解除できたら、セキュリティホールです。もし裏技が存在したらウイルス作成者は裏技でウイルスを作るでしょう。ですから、出来ないのが当たり前。
 
 
QooAppさんの目的はどうあれ、やりたいことはマクロウイルスと同じです。ですから、プログラムでセキュリティを下げることは、出来ないでしょう。
 
 
なお、私だったら、データファイルとVBAコードを、切り離しします。ユーザーのデータブックは「xlsx形式」で運用。VBAコードはアドインで作成。ユーザーにはアドインブックを配布します。バージョンアップはアドインを再度、配布で対応します。
 
 

投稿日時: 22/06/13 10:44:30
投稿者: QooApp

MMYS様 コメントありがとうございます。
 
言われてみれば確かにウィルスの挙動と同義ですね。
目的第一で失念しておりました。
 
自己の制御下を離脱するファイルに実装予定だったので該当のモジュールはいったん削除し、教えていただいた内容を元に再考します。
 
目的としては空の新規ブックに複数のワークシートを挿入した後、ブック内の全シートの自動印刷指示を出すマクロの標準モジュールを複製しようとしておりました。
 
改めて考えると該当の新規ブックにマクロが積まれてしまうと操作ユーザーへ「xlsxで保存するとマクロが消えるが良いか」の警告が出ることもユーザーを混乱させるだけだなと思ったので不要そうですし、本件のセキュリティ問題のことも考えると尚更非推奨だなと思いました。
 
再度実装を検討する場合はいったん別方法で開発するようにいたします。
 
ありがとうございました。
本件これにてクローズさせていただきます。