[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/06/28(Tue) 11:08
投稿者名:すぎやま
Eメール:
URL :
タイトル:
NTと200/XPでのShellExecuteの動作の違いについて
はじめまして、すぎやま と申します。

現在 ShellExecute API を使用して ExcelMacro を起動しています。
そこで Windows2000/XP と NT の間に動作の違いが出て困っています。

ShellExecute で ExcelMacro を起動した場合
2000/XP では Macro の OPEN イベントの処理が終わるまで待機するのに対して
NT ではすぐに処理が VB 側に戻ってきてしまいます。

現在のプログラムでは
ShellExecute の後に引数としたファイルを削除しているのですが
この処理を生かすために、NT の場合にも OPEN イベントの終了を待って
処理を継続させたいと思っています。

このような処理を行うためにはどのようにしたら良いのでしょうか?

よろしくお願いします。

投稿時間:2005/06/29(Wed) 10:34
投稿者名:だい
Eメール:dee_bassist@hotmail.com
URL :
タイトル:
Re: NTと200/XPでのShellExecuteの動作の違いについて
> 現在 ShellExecute API を使用して ExcelMacro を起動しています。
> そこで Windows2000/XP と NT の間に動作の違いが出て困っています。

現状、APIをどのように呼んでいますか?
Windows2000以降とそれより前のOSでは、
第2引数LPCTSTR lpVerbがNULLの場合の扱いが異なるようですが...
hhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpshell/html/_win32_shellexecute.asp

とはいえ、ShellExecuteは投げっぱなしで待機してくれないのが本来ではなかったかと...(自信無し^^;)
確実に待機するのであれば、
ShellExecuteEx等と待機させる仕組みを用意するのがよろしいかと思われます。
hhttp://www31.ocn.ne.jp/~heropa/vb17.htm
hhttp://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips053.htm

投稿時間:2005/06/29(Wed) 13:56
投稿者名:すぎやま
Eメール:
URL :
タイトル:
Re^2: NTと200/XPでのShellExecuteの動作の違いについて
返答遅れてすいません。

> 現状、APIをどのように呼んでいますか?
> Windows2000以降とそれより前のOSでは、
> 第2引数LPCTSTR lpVerbがNULLの場合の扱いが異なるようですが...
第2引数は "OPEN" を与えています。

> とはいえ、ShellExecuteは投げっぱなしで待機してくれないのが本来ではなかったかと...(自信
無し
^^;)
はい、確かに非同期に動くのですが、NT では本当に起動指示を出すだけで
2000 以降ではプログラムが起動するまで待機するような動きをしています。



> 確実に待機するのであれば、
> ShellExecuteEx等と待機させる仕組みを用意するのがよろしいかと思われます。

ExcelMacro の OPEN が終了するまでは待ってほしいのですが、
Excel 自体とは非同期に動くようにしたいのです…
こういう場合はどうしたらよいのでしょうか

投稿時間:2005/06/29(Wed) 17:05
投稿者名:だい
URL :
タイトル:
Re^3: NTと200/XPでのShellExecuteの動作の違いについて
> ExcelMacro の OPEN が終了するまでは待ってほしいのですが、
> Excel 自体とは非同期に動くようにしたいのです…

適宜Sleepを行うのが一番安直ですが、
そのExcelMacro の OPEN 終了をシビアに検知するとなると、
なにか、VB側からそれを知る方法(Open後にダミーファイルを作成するとか)があれば簡単ですが、
それが無いとなると、
COMやDDE等でプロセス間通信を行うという手も無くはないです。

投稿時間:2005/06/29(Wed) 17:58
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^3: NTと200/XPでのShellExecuteの動作の違いについて
> > 確実に待機するのであれば、
> > ShellExecuteEx等と待機させる仕組みを用意するのがよろしいかと思われます。
>
> ExcelMacro の OPEN が終了するまでは待ってほしいのですが、
> Excel 自体とは非同期に動くようにしたいのです…
>
方法がShellExecuteExじゃないけど、↓じゃだめかな?
    dim strFName As String
    Dim objExApp As Object

    Set objExApp = CreateObject("Excel.Application")
    objExApp.Workbooks.Open strFName
    objExApp.Visible = True
    Set objExApp = Nothing

投稿時間:2005/06/29(Wed) 19:42
投稿者名:すぎやま
Eメール:
URL :
タイトル:
解決
>     Set objExApp = CreateObject("Excel.Application")

なるほど Excelオブジェクトを操作すればよかったんですね、
この方法でやってみようと思います。

だいさん、GODさんありがとうございました。

# ほかにOPENの動作の違いで困っている人はいないのかな