プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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 マクロという名前が出てきます。もしも、オートメーションを想定したソフトである場合は、このように外部から動かそうとはせずに、もっと確実な方法があるかもしれません。
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/07/25 14:00

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のショートカットのプロパティ等で確認できるかと思います。
    • good
    • 2
この回答へのお礼

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

お礼日時:2009/07/25 14:02

まずは SHELL実行 VBA で検索しましょう



Shellでは、.EXE を指定してください。

参考URL:http://oshiete1.goo.ne.jp/qa4981685.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/25 14:04

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