- ベストアンサー
EXCEL VBA で他のアプリケーションを開く方法について
EXCEL VBAで他のアプリケーションを開く方法について教えていただきたいことがあります。 現在開いているエクセルのブックと同じフォルダにある、"AAA"という名称のsqc形式のファイル(EAST社のSkyLink Ver9.0のコマンドファイルです)をVBAで開く。 SHELL関数で開くと思っていたのですが、 Sub Test() Dim MyPath As String, MyTask As Double MyPath = ActiveWorkbook.Path & "\" MyTask = Shell(MyPath & "AAA.sqc") SendKeys "%FO", True End Sub とすると 「プロシージャの呼び出し、または引数が不正です」 というメッセージが出てしまいます。 如何せんSHELL関数を使うのが初めてでして、色々調べても どうしても解決策にたどり着きません。 どうぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >SHELL関数で開くと思っていたのですが、 たぶん、読み違えたのだと思います。Shell でファイルを開くというのは、全部で3つの種類があります。それぞれ使い方が違います。ご質問に書かれているShell は、Excelの内部から呼び出す、つまり、Excelの配下からの呼び出しですから、ファイル名を指定しても、それを起動するソフトは分かりません。 一旦、Excelから降りてあげないといけないのですが、しかし、その方法が、通常2つの種類あります。ひとつは、Win OSからと、コマンドラインからと二種類あります。(厳密には、Win32APIなど、後二つあります。) 使いやすい方法は以下の方法ですが、拡張子が登録していることと、OS によって、その挙動が変わるはです。若干、エキスプローラからクリックしたものとは違うようです。 '------------------------------------------- Sub TestSehll_1() Dim objSh As Object Dim myPath As String Dim fn As String '------------------------------------------- fn = "AAA.sqc" myPath = ActiveWorkbook.Path & "\" & fn '------------------------------------------- If Dir(fn) = "" Then MsgBox "ファイルがありません。", 48 Exit Sub End If With CreateObject("Shell.Application") .ShellExecute myPath End With ''SendKeys "%FO", True 'これは、どうかな? End Sub なお、SkyLink というソフトの仕様を読んでみないけれども、検索すると、そのソフト名と同時に、Excel マクロという名前が出てきます。もしも、オートメーションを想定したソフトである場合は、このように外部から動かそうとはせずに、もっと確実な方法があるかもしれません。
その他の回答 (2)
- kybo
- ベストアンサー率53% (349/647)
Shellで直接指定するのはEXE形式のアプリケーションです。 ペイントで「C:\1,jpg」を開くには以下のように Shell "アプリケーションへのフルパス+名前" "開きたいファイルのフルパス+名前" とします。 Sub test() Dim P As String P = "C:\1.jpg" Shell "C:\WINDOWS\system32\mspaint.exe" & " " & P, vbNormalFocus End Sub EAST社のSkyLinkのプログラム本体がどのような名前、どこに格納されているのかは、SkyLinkのショートカットのプロパティ等で確認できるかと思います。
お礼
ありがとうございます。EXE形式のアプリケーションではないようですが教えていただいた方法で動きました。
- Sinogi
- ベストアンサー率27% (72/260)
まずは SHELL実行 VBA で検索しましょう Shellでは、.EXE を指定してください。
お礼
ありがとうございます。 教えていただいたURLで基本的なことを勉強します。昨日一晩かけて一応調べたのですが、どうも基本的なことが理解できていないみたいで堂々巡りでした。
お礼
ありがとうございます! コードの内容はからない部分もありますが、とりあえず教えていただいた方法をそのまま使ったら動きました。 SkyLinkはキーボードの割付も多く、オートメーションを想定しているソフトだと思うのですが、自分がエクセルとアクセス以外の知識については極端に乏しくて困っておりました。 教えていただいたコードをこれから色々いじくってみて勉強します。 また何かありましたらよろしくお願いいたします。