tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルCSV保存でデータ実行防止によるエラー
記事No14647
投稿日: 2010/04/22(Thu) 12:04
投稿者スプラウト
サンプルにソースにある。「VBからエクセルを操作する(その1)」を作成し、Win2008Server Standard SP1で実行すると、「データ実行防止(DEP)」により、CSVが作成されません。
DEPの対象プログラムから外す設定をしても、メッセージが表示されなくなるだけで、強制終了され画面が消えてしまいます。

開発環境のXPでは正常に動作します。
どのように解決すればよいでしょうか。

因みに、ソースコードを少し書き換えてエクセル形式で保存すると、正しく保存され強制終了とはなりません。

解決方法をご存知の方、ご教示いただけないでしょうか。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: CSV保存でデータ実行防止によるエラー
記事No14648
投稿日: 2010/04/24(Sat) 07:58
投稿者花ちゃん
> 開発環境のXPでは正常に動作します。
> どのように解決すればよいでしょうか。

回答ではありません。

Excel を使っているなら、Excel のバージョンや参照設定をどのようにしているのか?
等の最低限の環境を書かないと。
又、データ実行防止(DEP) に関するエラーがでているのですから、その辺の設定は
問題ないのでしょうね。
>DEPの対象プログラムから外す設定をしても 
どのプログラムを外されたのでしょうか? 問題の自作プログラム or Excel.exe ?
(実行環境での事か開発環境での事か等も)
エラーメッセージをキーに検索。
http://www.atmarkit.co.jp/fwin2k/win2ktips/501dep/dep.html

この掲示板の上や投稿画面にも書いていますように、詳しい環境等が書かれていないと
ここの注意事項を読んでいない・守らない人と見なしレスがつきません。

開発環境では問題がなく実行環境では動作しないなら、その環境の違い等を詳しく
書いて頂かないとこれを見ている人は正確な判断ができないし、何度もやりとりを
しなくてはならないし、推測の回答しかできません。

うまく説明ができない場合は、事象を再現できる最低限のコードを投稿するなどして
下さい。
CSV 形式で保存しているのならどのように保存しているとかも。
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=16

[ツリー表示へ]
タイトルRe^2: CSV保存でデータ実行防止によるエラー
記事No14649
投稿日: 2010/04/26(Mon) 11:29
投稿者スプラウト
申し訳ございません。
> Excel を使っているなら、Excel のバージョンや参照設定をどのようにしているのか?
> 等の最低限の環境を書かないと。
実行環境のExcelは2000でした。開発環境のExcelは2003です。

> 又、データ実行防止(DEP) に関するエラーがでているのですから、その辺の設定は
> 問題ないのでしょうね。
> >DEPの対象プログラムから外す設定をしても 
> どのプログラムを外されたのでしょうか? 問題の自作プログラム or Excel.exe ?
自作のプログラムです。

> (実行環境での事か開発環境での事か等も)
開発環境では動きますので、外す設定はしていません。

> 開発環境では問題がなく実行環境では動作しないなら、その環境の違い等を詳しく
> 書いて頂かないとこれを見ている人は正確な判断ができないし、何度もやりとりを
> しなくてはならないし、推測の回答しかできません。
> うまく説明ができない場合は、事象を再現できる最低限のコードを投稿するなどして
> 下さい。
> CSV 形式で保存しているのならどのように保存しているとかも。
> http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=16

実行環境
Win2008Server Standard SP1
Excel2000

開発環境
WinXP Pro SP3
Excel2003
VB6 SP6

ソースコードは、Excel・Word関係に掲載されている「VBとエクセル間でデータの
やりとり」でした。すみません、「VBからエクセルを操作する(その1)」では
ありませんでした。
http://hanatyan.sakura.ne.jp/vbhlp/excel05.htm

引き続きよろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: CSV保存でデータ実行防止によるエラー
記事No14650
投稿日: 2010/04/26(Mon) 13:18
投稿者花ちゃん
こちらからの問い合わせには答えて頂かないと判断できません。
(同じ事を何度も言っていても話が進みませんので)
開発環境のExcel のバージョンと実行環境のExcelのバージョンが違うと参照設定や
起動コード等が違いますので正しく動作しません。

>CSV 形式で保存しているのならどのように保存しているとかも。
Excel 形式なら問題ないのなら、尚更...。

[ツリー表示へ]
タイトルRe^4: CSV保存でデータ実行防止によるエラー
記事No14652
投稿日: 2010/04/26(Mon) 15:22
投稿者スプラウト
> こちらからの問い合わせには答えて頂かないと判断できません。
> (同じ事を何度も言っていても話が進みませんので)
> 開発環境のExcel のバージョンと実行環境のExcelのバージョンが違うと参照設定や
> 起動コード等が違いますので正しく動作しません。

申し訳ございません。
開発環境のExcelは2003ですので、参照設定は
Microsoft Excel 11.0 ObjectLibraryとしてあります。

> >CSV 形式で保存しているのならどのように保存しているとかも。
> Excel 形式なら問題ないのなら、尚更...。

コードはサンプルそのままで、保存フォルダを実在するフォルダに変更して
あるだけです。

魔界の仮面弁士様のご指摘の通り、各オブジェクトを As Object で宣言すると
現象は出なくなりました。

大変お手数をおかけしました。
ありがとうございました。

[ツリー表示へ]
タイトルRe^3: CSV保存でデータ実行防止によるエラー
記事No14651
投稿日: 2010/04/26(Mon) 13:43
投稿者魔界の仮面弁士
> http://hanatyan.sakura.ne.jp/vbhlp/excel05.htm
そのページには、
≫ '★プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryに
≫ ' チェックを入れておいて下さい。
という記載がありますが、今回は参照設定しない方が良いでしょう。

各オブジェクトは As Object で宣言するようにし、必要な定数については
自分で Const を定義するようにしてみてください。



> 実行環境
> Excel2000
>
> 開発環境
> Excel2003

Excel ライブラリはバージョンを重ねるごとに、Sub から Function に拡張されたり、
メソッドやプロパティに省略可能な引数が追加されるといった、
バイナリ互換性の無いインターフェイスの修正が加えられています。


たとえば Range オブジェクトの Value プロパティは、
 'Excel 97, 2000
 Property Get/Let Value() As Variant

 'Excel 2002, 2003, 2007
 Property Get/Let Value(Optional RangeValueDataType As Variant) As Variant
といった違いがあります。


レイトバインドで処理するのであれば、こうした差異をある程度は吸収できますが、
Dim ap As Excel.Application などといったアーリーバインドで開発する場合においては、
基本的に実行環境と開発環境の Excel バージョンが一致していなければなりません。

[ツリー表示へ]
タイトルRe^4: CSV保存でデータ実行防止によるエラー
記事No14653
投稿日: 2010/04/26(Mon) 15:26
投稿者スプラウト
> ≫ '★プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryに
> ≫ ' チェックを入れておいて下さい。
> という記載がありますが、今回は参照設定しない方が良いでしょう。
>
> 各オブジェクトは As Object で宣言するようにし、必要な定数については
> 自分で Const を定義するようにしてみてください。

参照設定を解除し、各オブジェクトを As Object で宣言すると現象は発生しなく
なりました。

> 基本的に実行環境と開発環境の Excel バージョンが一致していなければなりません。

CSVへの保存ができず、Excelへの保存ができるのはちょっと不可解ですが、
本来、実行環境ごとに作る必要があるということですね。

ありがとうございました。

[ツリー表示へ]