• ベストアンサー

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関数を使うのが初めてでして、色々調べても どうしても解決策にたどり着きません。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 マクロという名前が出てきます。もしも、オートメーションを想定したソフトである場合は、このように外部から動かそうとはせずに、もっと確実な方法があるかもしれません。

takohasisa
質問者

お礼

ありがとうございます! コードの内容はからない部分もありますが、とりあえず教えていただいた方法をそのまま使ったら動きました。 SkyLinkはキーボードの割付も多く、オートメーションを想定しているソフトだと思うのですが、自分がエクセルとアクセス以外の知識については極端に乏しくて困っておりました。 教えていただいたコードをこれから色々いじくってみて勉強します。 また何かありましたらよろしくお願いいたします。

その他の回答 (2)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

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のショートカットのプロパティ等で確認できるかと思います。

takohasisa
質問者

お礼

ありがとうございます。EXE形式のアプリケーションではないようですが教えていただいた方法で動きました。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

まずは SHELL実行 VBA で検索しましょう Shellでは、.EXE を指定してください。

参考URL:
http://oshiete1.goo.ne.jp/qa4981685.html
takohasisa
質問者

お礼

ありがとうございます。 教えていただいたURLで基本的なことを勉強します。昨日一晩かけて一応調べたのですが、どうも基本的なことが理解できていないみたいで堂々巡りでした。