VBAを使ってHFSSというソフトウェアを外部制御したいと考えています。
そのソフトの起動&終了や図形の形状編集、各種形式のファイル出力といった軽い操作は難なく動作させる事が出来るのですが、数GBのメモリを使用するような重たい処理をさせたりすると「別のプログラムでOLEの操作が完了するまで待機を続けます。」といったメッセージがVBA側に表示される事があり、その時点でFor文が途中で止まってしまい困っています。どうすればよろしいでしょうか?

なお、そのソフトウェア側で重たい処理が終了したのちに手動で「OK」ボタンをクリックすると次の処理へ進ませる事は出来ます。ですので、上記エラーメッセージが表示されたら自動でOKを選択したり、On Error Resume Nextのような感じでエラーメッセージを無視出来るだけでも結構です。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは。



話は簡単なのですが、解決は難しいです。

>「別のプログラムでOLEの操作が完了するまで待機を続けます。」

私の方も同様の問題でしたが、IE のアドオンのActiveX なので、私の状況とは違うようです。
本来は、マクロを使用するときに、OLEプログラムを外して動かせばよいのですが、たぶん、HFSS自体が、OLEで、Excelに繋がっているのでしょうね。

今回の原因は、OLE側の本体のソフトが終了する前に、マクロが終わろうとしてしまうということが原因です。それで、良くコードをごらんになって、「ソフトの起動&終了や図形の形状編集、各種形式のファイル出力」の、それぞれの作業の終わり目があるはすでず。その終わり目の前に、Wait を入れればよいのではないかと思います。

Application.Wait でも良いのですが、

負担の少ないAPIの
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'モジュールの最上に書く

で、適当の待ち時間を入れてあげればよいのではないか、と思います。

Call Sleep 1000 '1000/1000秒...1秒

状況からすると、1秒以上は掛かると思いますが……。

それから、
Application.ScreenUpdating = False 'や
Application.Calculation = xlCalculationManual '(<--> = xlCalculationAutomatic)

この二つぐらいが、効をそうするのではないかと思います。

また、On Error Resume Next などの、エラートラップは、あくまでも、VBA の内部の問題ですから、トラップには掛かりません。
    • good
    • 0
この回答へのお礼

ご回答頂きどうもありがとうございます。
WaitやApplication.ScreenUpdating = False、Application.Calculation = xlCalculationManualを全て試してみましたがダメでした。

しかし、頂いたアドバイスを元に、VBAで全てを操作する事を諦め、VBAを使っていったん複数のVBSを作っておいた上で、Shellを使ってそれぞれをMSDOS経由でVBSを実行させてみた所、意図した通りの動作をさせる事が出来ました。本当にどうもありがとうございました。

お礼日時:2009/05/26 17:18

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QOLEの構造化ストレージについての入門的情報を探しています

お世話になります。
OLEの構造化ストレージの扱い方について、簡単なサンプルコードを使って解説している本あるいはURLを教えて頂けませんでしょうか?
INSIDE OLE2という書籍を購入したのですが
アプリケーションを1から作っていくという説明の仕方についていけず
OLEの構造化ストレージに的を絞った短いサンプルコードの
繰り返しで説明してある本はないかなと探しております。

XLSファイルの内容をExcel等を使わずに自力で、読込・更新したいだけなので、OLE全体に踏み込んでいくつもりはなく、構造化ストレージの説明があれば、他の説明箇所に問題があっても気にしないです。

またXLSファイル(BIFF8)のフォーマット自体は仕様書をもっているので
本当に、OLEの構造化ストレージの扱い方さえ、わかればいいのですが。

Aベストアンサー

今の時代なかなかOLEの情報は見あたりませんね。

Inside OLE2を買われるくらいですから、参考URLなんかはもうお調べになっているでしょうが・・

国内ではこのサイトくらいでした。
http://www5.plala.or.jp/atata/net/

.NETからOLEを使う方法ですが、原理さえ分かればC++でも書けるのでは。
http://www.vsj.co.uk/dotnet/display.asp?id=628

書籍もほとんど絶版ですね。「 OLE2プログラミング技法―OLEに対応したWindowsプログラム開発の基礎と実践 」という本には構造化ドキュメントの解説章がありますが、全編にわたって断片的で網羅性がなく、非常に分かりづらいです。「 ATL COMプログラミング―ATLとVisualC++で作る高性能COMコンポーネント」はオートメーションの解説書で、構造化ドキュメントにはまったく触れられていません。
上記2冊は所有していますが、お勧め*しません*。
持っていないので無責任ですが、「Microsoft Office OLE活用ガイド―OLEドキュメント&オートメーション」という書籍はタイトルからしてそれっぽいんじゃないでしょうか。
http://www.amazon.co.jp/s/ref=nb_ss_gw?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Dstripbooks&field-keywords=ole&Go.x=0&Go.y=0&Go=Go

参考URL:http://msdn.microsoft.com/en-us/library/aa380369%28VS.85%29.aspx

今の時代なかなかOLEの情報は見あたりませんね。

Inside OLE2を買われるくらいですから、参考URLなんかはもうお調べになっているでしょうが・・

国内ではこのサイトくらいでした。
http://www5.plala.or.jp/atata/net/

.NETからOLEを使う方法ですが、原理さえ分かればC++でも書けるのでは。
http://www.vsj.co.uk/dotnet/display.asp?id=628

書籍もほとんど絶版ですね。「 OLE2プログラミング技法―OLEに対応したWindowsプログラム開発の基礎と実践 」という本には構造化ドキュメントの解説章があり...続きを読む

Q【VBA】Accessを終了する前にメッセージを表示したい

【VBA】Accessを終了する前にメッセージを表示したい

Access2003のVBAです。

ユーザがAccessの「×」ボタンをクリックしたときに、
「○○システムを終了します。よろしいですか?」というメッセージを表示したいと考えています。

Excel VBAではExcelを終了させるときのイベントがあったように記憶していますが、
Accessでもそのようなことができるのか、わかりませんでした。

ご存知の方、ご教示願います。

Aベストアンサー

運用面でXボタンを非表示にする必要があるのならば、
方法が以下にあります。


http://support.microsoft.com/kb/300688/ja

その他、、レコードを保存せずに閉じたり
しないようにする手段はいろいろな方法があります。

QACCESS 97 で OLEオブジェクトを操作できません

ハードディスククラッシュで新しいHDに再セットアップをしたのですが、ACCESS97でテーブルにビットマップを挿入した所
OLEオブジェクトを操作できません。
OLEサーバーが登録されていません。
OLEサーバーを再セットアップしてください。
とメッセージが表示しフィールドはOLEオブジェクトは空ですとなってしまいます。
以前何処を設定したのか覚えていなく困っています
方法をご存知の方よろしくお願い致します。

Aベストアンサー

OLEサーバーになりうる図形ソフト
例えばMicrosoft Photo Editorが組み込まれており
ファイルに関連付けられている必要があります

Q「メッセージボックスを開いて5秒間「OK」が押されなかったら 次のコードに進む」ことは可能ですか?

Sub test3()
MsgBox "5秒反応がなかったら次へ進みます"
次のコード・・・
End Sub
と言うことは可能でしょうか?

Application.Wait (Now + TimeValue("00:00:05"))
は関係ないですよね。

よろしくお願いします。

Aベストアンサー

Sub Sample()
Dim WSH As Object
Set WSH = CreateObject("WScript.Shell")
WSH.Popup "5秒反応がなかったら次へ進みます", 5, "Title", vbInformation
Set WSH = Nothing
' 次のコード・・・
End Sub

って感じですかね。

QAccessのOLEオブジェクトについて

いつも大変お世話になっております。m(_ _)m
Accessで以下のようなDBを作りました。

(1)Access2003で、OLEオブジェクト型のフィールドを作る。
(2)OLEオブジェクト型のフィールドプロパティは以下のように設定
 1)OLEサイズ・・・クリップ
 2)OLE表示の種類・・・アイコン
 3)OLE更新設定・・・自動
 4)作成可能OLE・・・リンク
(3)このフィールドには、TIFファイルを挿入していきます。
 (2)の設定により、オブジェクトの挿入時は
 指定したパスにあるファイルをリンクで結び、
 アイコンが表示されます。

Access2003のPCで設定したオブジェクトは、どのバージョンのPCからも閲覧できます。しかし、Access2000のPCで同じことをやろうとすると、オブジェクトの挿入はでき、2000のパソコンではダブルクリックで閲覧可能ですが、2000で設定したオブジェクトを2003で見ようとすると
「OLEサーバーが登録されていません」
「OLEサーバーを再セットアップしてください」
と出て開くことができません。

これはどういうことなのでしょうか?

まとめます。
・2003で挿入したオブジェクトは、
 2003でも2000でも閲覧可能。
・2000で挿入したオブジェクトは、
 2000では見れるが、2003では見られない。
・エラー内容は、「OLEサーバーが登録されていません」です。

どうしたらいいのか教えてください。
よろしくお願いします。

いつも大変お世話になっております。m(_ _)m
Accessで以下のようなDBを作りました。

(1)Access2003で、OLEオブジェクト型のフィールドを作る。
(2)OLEオブジェクト型のフィールドプロパティは以下のように設定
 1)OLEサイズ・・・クリップ
 2)OLE表示の種類・・・アイコン
 3)OLE更新設定・・・自動
 4)作成可能OLE・・・リンク
(3)このフィールドには、TIFファイルを挿入していきます。
 (2)の設定により、オブジェクトの挿入時は
 指定したパスにあるファイルをリンクで結び、
...続きを読む

Aベストアンサー

「OLE」は、Access限定の機能ではなく、Windows自体の機能になり、どのプログラムで、動作するかデータを保持しています

・閲覧する際、起動するプログラムは?

と、言う事でファイル名で指定した場合、どのプログラムで使用するかは、Windows自体に依存します

OLEサーバに登録が無いと言うことは、多分閲覧で起動しているプログラムが違うものを使用している、プログラムが導入されていないと言う事だと思います

手としては、両方に導入されているペイント等でOLEを指定して登録するのが、良いのだと思いますがリンクの場合、それが可能だったか出来た記憶がないです

リンクにしている理由とかあります?
リンクで行うなら、ピクチャフレームでVBAにて自動読み込みを使用した方が、MDBファイルが小さく済む反面、共用ディスク上にファイルを置いておかないと、読込が出来ないとかの欠点が出てきたりします

現在のままでは、どういう解決へ持っていくのかも判らないですが・・・
・同じプログラムを導入する
・リンクをやめて、ペイント等のどのPCにも入ってるものを使用する
・MDBから、絵のファイルを読み込みに行き表示する
の解決法くらいしか手が無かったと思いますが・・・

「OLE」は、Access限定の機能ではなく、Windows自体の機能になり、どのプログラムで、動作するかデータを保持しています

・閲覧する際、起動するプログラムは?

と、言う事でファイル名で指定した場合、どのプログラムで使用するかは、Windows自体に依存します

OLEサーバに登録が無いと言うことは、多分閲覧で起動しているプログラムが違うものを使用している、プログラムが導入されていないと言う事だと思います

手としては、両方に導入されているペイント等でOLEを指定して登録するのが、良い...続きを読む

Q処理中ですよ!のメッセージ

いつも、お世話になります。
Access2000でVBAを書きました。
ところが処理がものすごく時間が掛かります。
これ以上、私のスキルではどうすることも出来ません。
そこで、画面上に「処理中です。ごめんなさい」などの
メッセージを出したいのです。
これはメッセージボックスではなく、例えばクエリーAが実行されいてる間はそのメッセージがず~と表示されていて終わったら勝手にきえるような動きがいいなぁと思います。
よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

メッセージ表示用のフォームを作成して、処理開始時に表示し、処理終了時に閉じればいいと思います。

Qリストボックスと連結OLEについて

リストボックス(LB1)で選んだ項目で、連結OLE(OLE1)に表示させる写真を変えたいのです。
テキストボックスに表示させる内容を変えるときは form1!LB1.column(x) でできたのですが同じやり方ではだめでした。
どなたかよろしくお願いします。

Aベストアンサー

アプリケーションが何かわからないのですが、Access2000であれば、

リストボックスの元になっているテーブルを”テーブル1”として、
フィールド名(データ型)
ID(オートナンバー型)
テキスト(テキスト型)
OLE1(OLEオブジェクト型)

フォーム(レコードソースはテーブル1)
リストボックス(LB1)(非連結)
テキストボックス(コントロールソースはテキスト)
OLE1(コントロールソースは、OLE1)

となっているとして、
リストボックスのクリック時イベントで、

Private Sub LB1_Click()
Me.RecordSource = "SELECT * FROM テーブル1 WHERE ID=" & Me.LB1.Column(0)
End Sub

とする方法はいかがですか?

QExcel2000 VBAにて、シート削除後のOKボタンメッセージを消したい

Excel2000 VBAにて、シート削除後のユーザー応答待ちの
OKボタンメッセージを消したいのですが、どうしたら
いいのでしょう?
消したあと、OKを求められずに、シートを削除したいのです。
どなたか 教えてください。

Aベストアンサー

削除する前に
  Application.DisplayAlerts = False
とします。

削除を終えたら、
  Application.DisplayAlerts = True
とします。

QMERRY OLE SOUL (デューク・ピアソン)

クリスマスシーズンになると聴きたくなるジャズアルバムとしてデューク・ピアソンの「MERRY OLE SOUL」があげられますが・・・・。
この「OLE」の意味が分かりません。
「all」のスラングかな、とも思ったのですが。「楽しい全てのソウル(魂)」とか?

どなたかご存じの方、いらっしゃいましたらお願いします。

Aベストアンサー

jakyyです。
「MERRY OLE SOUL」に邦題をつけますと、
「クリスマス万歳」「オーレ、オーレ、クリスマス」
こういったところでしょう。

QAccess200 OLEの登録の仕方

いつもお世話になっております。
Access2000を使ってデータの管理をしようとしています。
在庫管理で物品の写真データ(Jpeg)をテーブルにオブジェクトの挿入で取り込み、フォームで各データと写真を同時に見られるようにしたいのです。
会社のOfficeXPでは問題なくできましたが、自宅のAccess2000で同じようにしようとすると、
「OLEサーバーが登録されていません。OLEサーバーを再セットアップしてください」とメッセージがでます。
どのようにすればよいか、教えてください。
ちなみに自宅では会社で作ったデータは写真もちゃんと表示しました。
よろしくお願いします

Aベストアンサー

ご自宅でお使いのPCにNorton AntiVirusは入っていますか?
AntiVirusのスクリプト遮断機能でエラーがでる場合があります。AntiVirus2001以降ならオプションでスクリプト遮断を有効にするのチェックをオフにすると回避できます。
AntiVirus2000だとAntiVirusのdllを無効にするコマンド入力が必要です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング