VBからExcelを起動している最中にDoEventsをするには?

解決


ペンペン  2005-10-30 22:09:26  No: 127130  IP: [192.*.*.*]

こんにちわ。
教えていただきたいのですが、

VBからExcelを起動する場合に、起動している最中にDoEventsを実行したいのですが、何かうまい方法はないでしょうか?

現状は、↓の方法で起動してるのですが、この方法ですと、
起動中にVB側には制御が回ってこないので、DoEventsを実行することができません。

CreateObject("Excel.Application")

ぜひ教えてください。
よろしくお願いします。

開発環境は、
OfficeXp
VB6
です。

編集 削除
あん  2005-10-30 22:51:16  No: 127131  IP: [192.*.*.*]

shellで起動すればいいよ

編集 削除
ペンペン  2005-10-30 23:43:38  No: 127132  IP: [192.*.*.*]

あんさん。
早速の回答ありがとうございます。

ぐぐってみたのですが、どうもよく分かりません。

shellで起動する場合は、ファイルのフルパスが必要になりますよね?
これって、インストールしているOSやOFFICEのバージョンに依存しませんか?

TaskID = Shell("C:\Program Files\Microsoft Office\Office10\EXCEL.EXE")

ちなみに、私の環境は、XPで、OFFICE XPです。
他に、うまい方法があるのでしょうか?

よろしくお願いします。

編集 削除
結果を言うと  2005-10-31 09:18:39  No: 127133  IP: [192.*.*.*]

> これって、インストールしているOSやOFFICEのバージョンに依存しませんか?

依存しません。環境変数について調べてみましょう

編集 削除
ひろ  2005-10-31 09:40:37  No: 127134  IP: [192.*.*.*]

> 依存しません。環境変数について調べてみましょう
Excelの入っている場所は環境変数を見てもわかりません。
正しいパスはレジストリから探す必要があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\EXCEL.EXE

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Excel.exe

あたりがいいのでは?

本当は HKCR の Excel.Application から CLSIDを取得してHKCR\CLSID から該当するエントリを得て LocalServer へたどり着くのが正式なのかもしれませんが。

編集 削除
もげ  2005-10-31 10:03:39  No: 127135  IP: [192.*.*.*]

>VBからExcelを起動する場合に、起動している最中にDoEventsを実行したいのですが

具体的には、DoEventsをいれて何をしたいのですが?
動機が不明なので、それ自体、何かうまくない方法のように思えますが。

Excel.EXEのパスなら、
CreateObject("Excel.Application").Path
でとれますが、
VBアプリ起動時など他に時間のかかる処理に紛れて、
あらかじめCreateObjectしておくとか。

編集 削除
あん  2005-10-31 12:58:56  No: 127136  IP: [192.*.*.*]

ダミーのエクセルファイルを作っておいて
shellで
startをエクセルファイルで起動するのはどうかな?

編集 削除
ペンペン  2005-11-02 01:09:50  No: 127137  IP: [192.*.*.*]

みなさん、色々とありがとうございました。
なんとかSHELL関数で、実行することができました。

EXCELのパスについては、下記のコードで実施できました。

Function getExcelPath() As String
Dim hKey As Long
Dim RetVal As Long
Dim sProgId As String
Dim sCLSID As String
Dim sPath As String
   sProgId = "Excel.Application"
   'First, get the clsid from the progid
   'from the registry key:
   'HKEY_LOCAL_MACHINE\Software\Classes\<PROGID>\CLSID
   RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\Classes\" & _
      sProgId & "\CLSID", 0&, KEY_ALL_ACCESS, hKey)
   If RetVal = 0 Then
      Dim n As Long
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, "", n)
      sCLSID = Space(n)
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, sCLSID, n)
      sCLSID = Left(sCLSID, n - 1)  'drop null-terminator
      RegCloseKey hKey
   End If

   'Now that we have the CLSID, locate the server path at
   'HKEY_LOCAL_MACHINE\Software\Classes\CLSID\
   '     {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\LocalServer32
    RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
        "Software\Classes\CLSID\" & sCLSID & "\LocalServer32", 0&, _
      KEY_ALL_ACCESS, hKey)
   If RetVal = 0 Then
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, "", n)
      sPath = Space(n)
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, sPath, n)
      sPath = Left(sPath, n - 1)
      getExcelPath = sPath
      RegCloseKey hKey
   End If

End Function

こいつで拾ってきたパスをshellでキックして、
実行することができました。


ほんと、みなさん。ありがとうございました。

編集 削除