VBでExcelが起動されているか知りたい
- VBからExcelの起動状態を確認したい場合、FindWindowEx関数を使用します。
- 状況1では、特定のExcelファイルが起動している場合に正しく動作します。
- 状況2では、前面に表示されているExcelファイル名を指定する必要がありますが、ウィンドウの最大化によって起動判定が失敗する可能性があります。
- ベストアンサー
VBでExcelが起動されているか知りたい
環境 winXP Office2000 Excel VB6.0 sp5 VBからExcelが起動されているか知りたいのです。 【状況1】 [a.xls]を起動している状態で下記を実行すると問題なく起動が確認できます。 【状況2】 [a.xls][b.xls]を起動してて[b.xls]が前面にある場合は下記を実行しても[a.xls]を探せません。 またウインドウを最大化にしていない場合も"Microsoft Excel -"という文言がいらない?せいか探せません。 [FindWindowEx]を使用すればできるのかと思いましたがイマイチ使い方が分からず困っています。 よろしくお願いします。 'sampleソース--------------------------------------------- hwnd = FindWindow("XLMAIN", "Microsoft Excel - a.xls") If hwnd = 0 Then Msgbox(" 0 は、Excel が起動していないことを示します。") Else Msgbox(" 起動中") End If 'sampleソース---------------------------------------------
- terasyst
- お礼率100% (2/2)
- Visual Basic
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足しますね。 単に Excel が開いているかどうか...を調べるなら、API を使う必要はありません。 Dim xlApp As Object On Error Resume Next Set xlApp = GetObject(, "Excel.Application") If xlApp Is Nothing Then MsgBox "開いてない" Else MsgBox "開いてる" End If Set xlApp = Nothing On Error GoTo 0 みたいな感じで。ご質問の a.xls が開かれているか? という意味なら、 > Excel のプロセスが2つとか、3つあった場合はどうします? この点、Excel が異なるプロセスで複数存在する場合は、プロセス毎に調べなく てはなりません。これはかなり面倒なので、代替案として 「排他アクセスできなければファイルは使用中=開いている」 というロジックでどうですか? Private Sub Command1_Click() If IsOpend("C:\Sample\a.xls") > 0 Then MsgBox "開いている", vbCritical Else MsgBox "開いてないか、ファイルが無い", vbInformation End If End Sub ' // ファイルが使用中か調べる Public Function IsOpend(ByVal FilePath As String) As Long ' 排他アクセスできなければファイルは使用中 If Dir$(FilePath) <> "" Then Dim n As Integer n = FreeFile() On Error Resume Next Open FilePath For Binary Access Read Lock Read Write As #n Close #n If Err Then IsOpend = 1 ' 既に開いている Else IsOpend = 0 ' 開いていない End If On Error GoTo 0 Else IsOpend = -1 ' ファイルが見つからない End If End Function
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 XLMAIN --> XLDESK --> EXCEL7 の順で探します。このウインドウ構成は SPY++ を 使うとすぐわかりますよ。 Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As Long Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String _ ) As Long Sub Sample() Dim hWnd As Long hWnd = FindWindow("XLMAIN", vbNullString) If hWnd > 0 Then hWnd = FindWindowEx(hWnd, 0&, "XLDESK", vbNullString) ' lpsz2 === a.xls とか hWnd = FindWindowEx(hWnd, 0&, "EXCEL7", "a.xls") If hWnd > 0 Then MsgBox "(・∀・)ミッケ! Handle:=" & CStr(hWnd) Else MsgBox "(・∀・)いないみたい" End If Else MsgBox "(・∀・)Excel が起動してないみたい" End If End Sub でも、この方法では探しきれないと思います。Excel のプロセスが2つとか、 3つあった場合はどうします?
お礼
この方法も大変参考になりました。 ホントありがとうございました^^
補足
ありがとうございます! 希望通りの回答です!! >でも、この方法では探しきれないと思います。Excel のプロセスが2つとか、 3つあった場合はどうします? た 確かに…。探せないですね。(汗 もう少し自分で考えてみます…。 もし何か良い知恵がございましたらご教授願いますm(_ _)m とりあえずありがとうございました!!
関連するQ&A
- VBからExcelが起動しません
Excelファイルを開くプログラムをVBで作成したのですが 1つのパソコンだけ実行時エラー5が発生してExcelを起動できません どなたかお助けください プログラムはこんなかんじです WKPATH = "D:\Program Files\Microsoft Office\Office\EXCEL.EXE " & " c:\a.xls" exl = Shell(WKPATH, 1) ちなみにエラーが発生するパソコンはNT4.0sp6です
- ベストアンサー
- オフィス系ソフト
- (VB初心者) VB起動時既に起動されているExcelの情報
VisualBasic 6.0 初心者です。 既に起動しているExcelの後にVisualBasicを立ち上げた場合、 既に起動しているExcelの情報を得ることが出来るのでしょうか? やりたい事は Excel起動⇒VB起動⇒Excelのセルを選択⇒そのセルに入力されている値 を取得。 VB起動⇒Excel起動の場合はActiveCellの値を取得出来たのですが 既に起動しているExcelの場合 エラー になってしまいます。 お手数ですが、ご教授願います。 Private Sub コマンド1_Click() MsgBox ActiveCell End Sub 'Form_Load時にこれを実行しないと開いたExcelのアクティブセル値を得られない?? Private Sub Form_Load() MsgBox ActiveCell End Sub
- ベストアンサー
- Visual Basic
- UWSCからエクセルのマクロを実行
最近UWSCというソフトを使うようになりました。 で、エクセルからSHELLをつかってUWSCを立ち上げ実行し、UWSCの最後に再度エクセルの指定したマクロを実行したいと思っています。 エクセルファイル名= AAA.xls Excel = GETACTIVEOLEOBJ("Excel.Application" ,エクセルファイル名) ---- 中略 ---- Excel.Visible = True ACW(GETID("MICROSOFT EXCEL - " + エクセルファイル名 ,"XLMAIN"),-4,-4,1288,1002,0) CTRLWIN(GETID("MICROSOFT EXCEL"), MAX) msgbox("完了しました。") Excel.Application.Run エクセルファイル名 & "!Macro1" といったようなスクリプトを組んだのですが、なにもないままUWSCが終了してしまいます。 UWSCから指定のエクセルマクロを実行する方法を教えてください。
- ベストアンサー
- フリーウェア・フリーソフト
- VBからEXCELを起動する
VBよりExcelを起動するプログラムで困っています。 1.VBよりGetObject関数でTest.xlsを開く 2.Test.xls内のAuto_Openマクロでパラメータファイルをよみ、そこに指定されているエクセルファイルを新しいブックでを開く ということをしたいのですが(「マクロを有効にする」のダイアログは表示されてもかまわないです)、何故かTest.xlsが開いたと思ったらすぐ閉じてしまいます(Excel自体は終了してないですべてのワークシートが閉じた状態)。 Auto_Openマクロは走ってるようなのですが、ついでにCloseマクロも走ってしまいます。 ちなみにTest.xlsを単体で動かしたときは問題なく動くのです・・・。 以前はVB4+Excel95の環境でAPI(CreateProcess)を使用し同作業を行っていたのですが、そのAPIが長いファイル名のスペース(OFFICEがある「Program File」のスペース)を認識しないそうで、この方法が使えないということでGetObjectを使用してみたのですが・・・。 何か根本的な間違いをしているのか、それともコードにエラーがあるのかさっぱりわからずお手上げです。 うまく疑問点を説明できているか不安なんですが、わかる方、どうかご指導願います。 よろしくお願いします。 ---------------------------------------- OSは、Windows 2000 アプリケーションは、Excel 2000 です ----------------------------------------
- ベストアンサー
- Visual Basic
- VB.NETで他のアプリが完全に起動するまで待機する方法を教えて
VB.NET+WinXP環境なのですが、VB.NETで他のアプリを開いて MainWindowTitleでウィンドウタイトルを取得して、 それを元にFindWindowExでハンドル(Hwnd)を取得したいのですが Process.Start(ApplicationA) でアプリが完全に起動し終わる前に次の処理へ移ってしまい、 MainWindowTitleを取得する時に中身が""になってしまったり、 本来なら例えば 「Yahoo! JAPAN - Microsoft Internet Explorer」となるべきところを 「 - Microsoft Internet Explorer」の状態で取得して 次に進んでしまったりします。 起動を実行した後に、Sleep(2000)などを入れると大丈夫なのですが、 必要なSleep時間はマシンや開くアプリによって違うので不都合があります。 APIのWaitForInputIdleもHwndが取得できてからでないと使用できないようです。 恐れ入りますが、良い方法がありましたら、 ご教示頂きたく、お願い致します。
- ベストアンサー
- Visual Basic
- VB.NETで、Windows Vistaのスタートボタンを消すプログ
VB.NETで、Windows Vistaのスタートボタンを消すプログラムをしています。 下記コードでタスクバーを消せるのですが、 hwnd = FindWindow("Shell_traywnd", vbNullString) value = SetWindowPos(hwnd, -1, 0, 0, 0, 0, &H80) value = FindWindowEx(hwnd, 0, "Button", vbNullString) EnableWindow(value, 0) で、スタートボタンを消せません。 何が悪いのかご教示いただけますでしょうか。 どうぞよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- vbスクリプトからexcelのVBAを起動したい。
vbスクリプトからexcelのVBAを起動したいので、初心者ながら下記のようにコーディングしましたが、excelのVBA;main()が実行できません。 <excelのVBA;main()は単独では正常に起動します。> vbスクリプトからexcelのVBAの起動の方法を教えて下さい。 そのスクリプトをタスク(元旦)に起動したいです。 <vbスクリプト コーディング> dim exlApp On Error Resume Next set exlApp = createobject("Excel.Application") exlApp.visible = true exlApp.Workbooks.Open "C:\年賀状.xls" exlApp.run "Main" If Err Then WScript.Quit End IF If Not(exlApp Is Nothing) Then exlApp.Quit set exlApp = nothing End If
- ベストアンサー
- その他(プログラミング・開発)
- VB2008 エクセル出力
VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています
- ベストアンサー
- Visual Basic
- VBAを使用してWordからExcelのマクロを実行したい
a.docからb.xlsのVBA(マクロ)の Sub sample() MsgBox "hello" End Sub を実行できるようにするにはどうすればよいのでしょうか? 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003 ご存知の方がおられましたらご回答をよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBでエクセルのバージョンを指定して開く
PCにEXCEL2002と2013がインストールされています。 VBでエクセルを起動し、マクロを実行したいのですが、その際に起動するエクセルのバージョンを指定したいと考えています。 以下でやると標準設定のEXCELが開いてしまい、バージョンの指定ができません。 Dim xlApp As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApp.Workbooks xlBooks.Open("C:\test.xls") xlApp.Visible = True xlApp.Run("test.xls!macro") なにか方法はありますでしょうか?
- 締切済み
- Visual Basic
お礼
度々ありがとうございます! この発想の転換に気づきませんでした!! 本当にお世話になりました。 ありがとうございました。