人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAについて質問します。次の5つのマクロを作成してください。
?IEなどの特定のソフトを起動させるマクロ。
?そのソフトをアクティブにするマクロ。
?他のソフトで??を行う場合はマクロのどこを変えるか。
?特定のファイルをアクティブを開くマクロ。
?ファイルの上で「Enter」を押すマクロ。

●質問者: taroemon
●カテゴリ:コンピュータ
✍キーワード:IE VBA アクティブ エクセル ソフト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●30ポイント

?IEなどの特定のソフトを起動させるマクロ。

http://homepage2.nifty.com/kasayan/vba/vba3.htm

これを 行うには Shell関数を使います。

使い方は、上記HPをご覧ください。

なお、?以外は、ちょっと無理かと思います。

起動させた時点で、それがアクティブになればいいんですが。

◎質問者からの返答

いつもご回答ありがとうございます。

参考にします。


2 ● llusall
●50ポイント

こちらでいかがでしょうか?

標準モジュールに貼り付ける等して試してみてください。

Option Explicit

'関連付けにあわせて、指定したファイルを開くAPI関数

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL = 1

Private Const SW_SHOW = 5

'デスクトップのハンドルを渡すAPI関数

Private Declare Function GetDesktopWindow Lib "user32" () As Long

'■要望1と2

Public Function Test1()

    '?IEなどの特定のソフトを起動させるマクロ

    '?そのソフトをアクティブにするマクロ。

    'Shell関数を使います。詳しくはヘルプを参照のこと。

    '例:IEを起動。アクティブ(フォーカスをセット)にする。

    Call Shell("C:\Program Files\Internet Explorer\IEXPLORE.EXE", vbNormalFocus)

    'vbHide:フォーカスを持ち、非表示にされるウィンドウ。定数 vbHide は、Macintosh では使用できません。

    'vbNormalFocus:フォーカスを持ち、元のサイズと位置に復元されるウィンドウ

    'vbMinimizedFocus:フォーカスを持ち、最小化表示されるウィンドウ

    'vbMaximizedFocus:フォーカスを持ち、最大化表示されるウィンドウ

    'vbNormalNoFocus:最後にウィンドウを閉じたときのサイズと位置に復元されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。

    'vbMinimizedNoFocus:最小化表示されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。

End Function

'■要望3:不要

'■要望4

Public Function Test4()

    '?特定のファイルをアクティブを開くマクロ。

    '拡張子に関連付けされたアプリケーションで開きます

    '例:テキストファイルを開く

    Call AppFileOpen("D:\hoge.txt") '←■ファイルのパス名を指定

End Function

'■要望5

Public Function Test5()

    '?ファイルの上で「Enter」を押すマクロ。

    'SendKeys でキーを送信します。詳しくはヘルプを参照のこと。

    '構文 SendKeys string[, wait]

    '引数: 転送するキー コード、キーコードの転送によって行われる処理が終了するまで、実行を一時中断するかどうかを設定

    '例:「Enter」を押す

    SendKeys "{ENTER}"

    

End Function



'----------------------------------------------------------------

'----------------------------------------------------------------

' 拡張子に関連付けされたアプリケーションで実行

'----------------------------------------------------------------

'----------------------------------------------------------------

Public Function AppFileOpen(OpenFilePath As String) As Boolean

    Dim lngAPIReVal As Long

    

        'URLを実行する

    lngAPIReVal = ShellExecute(GetDesktopWindow, "open", OpenFilePath, vbNullString, "", SW_SHOWNORMAL)

    If lngAPIReVal <= 32 Then

        AppFileOpen = False

    Else

        AppFileOpen = True

    End If

End Function


◎質問者からの返答

ご回答ありがとうございます。

ほぼ求めているとおりなのですが、僕にはわからないことも多いです。そこで以下のとおり再質問させていただきます。

質問?について

絶対パスを使用する場合、他のパソコンでは使えません。他に何か良い方法はありますか?

質問?について

プログラムが起動しているが非アクティブの物をアクティブにするというマクロをお願いします。

質問?について

非アクティブのファイルの上でEnterを押すというマクロをお願いします。


3 ● llusall
●50ポイント

質問?について

絶対パスを使用する場合

ネットワークパスを設定します。

例:

Call Shell("\\SERVER_NAME\D\CALC.EXE", vbNormalFocus)

※当然、EXEファイルは、ネットワーク上になければなりません。(ローカルは駄目です)



質問?について

プログラムが起動しているが非アクティブの物をアクティブにする

以下にサンプルを記載します。



質問?について

WIN32APIでそのようにメッセージを投げるような事ができるかもしれませんが、

私的には、無理です。

ごめんなさい。



Option Explicit

' クラス名とウィンドウ名が指定された文字列と一致するウィンドウのハンドルを取得する関数の宣言

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _

   (ByVal lpClassName As String, _

    ByVal lpWindowName As String) As Long

' ウィンドウがアイコン化されているかどうかを判断する関数の宣言

Declare Function IsIconic Lib "user32" _

   (ByVal hWnd As Long) As Long

' ウィンドウをウィンドウを復元してアクティブ化する関数の宣言

Declare Function OpenIcon Lib "user32" _

   (ByVal hWnd As Long) As Long


Public Sub メモ帳を起動()

    Dim lngProcessId As Long

    

    ' メモ帳を起動

    lngProcessId = Shell("Notepad.exe", _

                         vbMinimizedFocus)

'    ' プロセスIDを表示

'    Debug.Print "プロセスID:" & Hex(lngProcessId)

'

'    ' クラス名を指定する文字列を表示

'    Debug.Print "クラス名を指定する文字列:" & "Notepad"

'

'    ' ウィンドウの表示方法を表示

'    Debug.Print "復元してアクティブ化"

End Sub

Private Sub アクティブにする()

    Dim lngHandleWindow       As Long

    Dim lngWin32apiResultCode As Long

    Const ACTIVE_APP_CLS_NAME = "Notepad" '■ここのクラス名を設定します

    

    ' クラス名でウィンドウハンドルを取得

    lngHandleWindow = FindWindow(ACTIVE_APP_CLS_NAME, _

                                 vbNullString)

    ' ウィンドウハンドルが取得できた場合は

    If lngHandleWindow <> 0& Then

        ' ウィンドウがアイコン化されている場合は

        If IsIconic(lngHandleWindow) <> False Then

            ' ウィンドウを復元してアクティブ化

            lngWin32apiResultCode = OpenIcon(lngHandleWindow)

        End If

    End If

End Sub

※尚、クラス名が判らない場合は、ClsInfo Windowクラス名・表示位置取得ツールを利用すると良いです

◎質問者からの返答

再度のご回答ありがとうございます。

大変参考になりました。またお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ