電子書籍の厳選無料作品が豊富!

エクセルで
Sub test()
Dim path As String
Dim taskID As Double

path = "C:\Windows\System32\notepad.exe"
taskID = Shell(path)

Call AppActivate(taskID)

End Sub

を実行しても、アクティブ(前面表示)されません。

シートにコマンドボタンを設置して、
Private Sub CommandButton1_Click()
test
End Sub
としても、エクセルの後ろ側に開いてしまいます。

http://note.phyllo.net/?eid=1106208
のサイトを参考にしました。
VB6のサイトを見てるから駄目なのでしょうか?
エクセルでやりたいです。

A 回答 (1件)

こんにちは。



最初に、こちらの話ですが、
> http://note.phyllo.net/?eid=1106208
>のサイトを参考にしました。
>VB6のサイトを見てるから駄目なのでしょうか?

はっきりと用語は思い出せないので不正確な言葉ですが、うまく行かない理由として、VB6の場合は、Formがあって、そのFormの構造と、ExcelのWindowの構造とは仕組みが違うので、AppActivateが上手くいかない、というような説明だったと思います。

それで、Notepad.exeを前面に出すという、Excelのコードではいくつかあるのですが、以下が定番というか古典的のようですね。一応、Notepad.exeは、パスが通っているものとしています。今どきは、こういうコードはあまり書かないかもしれません。

'//
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

Sub NotePad_Foreground()
  Dim hwnd As Long
  Shell "Notepad.exe", vbNormalNoFocus
  hwnd = FindWindow("Notepad", vbNullString)
  SetForegroundWindow hwnd
End Sub
    • good
    • 0
この回答へのお礼

やはりVB6ではエクセルと仕組みが違うからできないのですね。
ご提示いただいたコードで試してみたら出来ました!
とてもわかりやすい説明ありがとうございます。

お礼日時:2012/12/29 20:15

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