お世話になっております。
DelphiXE2、Windows8.1です。
また、エクセルは、Excel2010です。
Mr.XRAYさんの、Delphi サンプルプログラム集の、
400_CreateOleObject によるエクセル操作の基本例
を参考にさせていただいて、
既存のエクセルファイルを開き、そのファイルのシートにDelphiのアプリから値を入力して、
そのエクセルファイルを名前を付けて保存するプログラムを作りました。
その既存のエクセルファイルには、マクロが入っていて、そのマクロをDelphiから実行したいのです。
しかし、マクロを実行させることができません。
エクセルファイルの中に、「SetCell」というマクロを作り、
Delphiのプログラム中で、
Excel.Application.Run('SetCell');
とすると、ここで、(メッセージ’マクロ'setCell'を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。’)を検出しました。
というエラーが出ます。
なんとなく、セキュリティに関するエラーかな?と思いますが、対応の仕方がわかりません。
既存のエクセルファイルの拡張子は、「.xls」「.xlsx」「.xlsm」といろいろ試してみましたが、どれも同じエラーが出ます。(もちろん拡張子を書き換えたのではなく、保存形式を変えて保存しました)
また、エクセルのアプリからこの既存のエクセルファイルを開いて、「SetCell」マクロを実行すると、うまく動作します。
マクロは、
Sub SetCell()
・・・・・・
という書き方をしています。
よろしくお願いします。
セキュリティの関係なのでDelphi側からはどうしようもないかと
マクロを強制的に有効にするのであればその開きたいExcelファイルを開いた後
「ファイル」「オプション」「セキュリティセンター」「セキュリティの設定」で
「マクロの設定」を開いて
「すべてのマクロを有効にする」
にチェックをするしかありませんが
この設定以降にウイルス付きのExcelファイルを開いたりしたら危険です。
あまりお薦めはしません。
ExcelのマクロでやってることをDelphiで再現するのが一番かも
セキュリティとマクロ動作
http://www.asahi-net.or.jp/~ef2o-inue/secur/sub07_01.html
ありがとうございます。
やっぱり、セキュリティの関係ですよね。
お客さんのパソコン上で動くソフトなので、Delphiからマクロを実行させるという方法はあきらめます。
「ExcelのマクロでやってることをDelphiで再現する」方法にしようかと思いましたが、面倒だったので、既定のエクセルファイルにボタンを1つ配置して、ボタンをクリックしてもらって、セルに色とか罫線を入れてもらうようにしました。
ありがとうございました。
解決しているようですが、
以前に似た感じの作業をしたことがあるので。
マクロの自動実行
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_130_04.html
ツイート | ![]() |