こんにちわ。
教えていただきたいのですが、
VBからExcelを起動する場合に、起動している最中にDoEventsを実行したいのですが、何かうまい方法はないでしょうか?
現状は、↓の方法で起動してるのですが、この方法ですと、
起動中にVB側には制御が回ってこないので、DoEventsを実行することができません。
CreateObject("Excel.Application")
ぜひ教えてください。
よろしくお願いします。
開発環境は、
OfficeXp
VB6
です。
shellで起動すればいいよ
あんさん。
早速の回答ありがとうございます。
ぐぐってみたのですが、どうもよく分かりません。
shellで起動する場合は、ファイルのフルパスが必要になりますよね?
これって、インストールしているOSやOFFICEのバージョンに依存しませんか?
TaskID = Shell("C:\Program Files\Microsoft Office\Office10\EXCEL.EXE")
ちなみに、私の環境は、XPで、OFFICE XPです。
他に、うまい方法があるのでしょうか?
よろしくお願いします。
> これって、インストールしているOSやOFFICEのバージョンに依存しませんか?
依存しません。環境変数について調べてみましょう
> 依存しません。環境変数について調べてみましょう
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 へたどり着くのが正式なのかもしれませんが。
>VBからExcelを起動する場合に、起動している最中にDoEventsを実行したいのですが
具体的には、DoEventsをいれて何をしたいのですが?
動機が不明なので、それ自体、何かうまくない方法のように思えますが。
Excel.EXEのパスなら、
CreateObject("Excel.Application").Path
でとれますが、
VBアプリ起動時など他に時間のかかる処理に紛れて、
あらかじめCreateObjectしておくとか。
ダミーのエクセルファイルを作っておいて
shellで
startをエクセルファイルで起動するのはどうかな?
みなさん、色々とありがとうございました。
なんとか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でキックして、
実行することができました。
ほんと、みなさん。ありがとうございました。
ツイート | ![]() |