結局、うまくできなかったので、
Set oApp = CreateObject("Excel.Application")
oApp.Run "関数名", パラメータ
で渡したように見せただけでした・・・
※もっとスマートな方法がありそうですが、何かの参考となれば幸いです。
<Excel 起動オプションのお話(引数的なラブレターを渡したい)>
どうも、三流プログラマーのKen3です。 今回は、 Excelの起動オプションのお話です/* * 1.今回のキッカケ */
http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi 掲示板に、下記の質問が来ました。 --------------- >投稿時間:2003/06/06(Fri) 10:08 >投稿者名:JackZero > >タイトル:起動時に 引数を! > >お世話になります. > >ExcelやProject等で、起動時にコマンドラインにて >引数を渡したいのですが、どのようにすればマクロ内で >取得できるのでしょうか? --------------- そんな質問に対して、 > ExcelやProject等で、起動時にコマンドラインにて > 引数を渡したいのですが、どのようにすればマクロ内で > 取得できるのでしょうか? excel.exe c:\new.xls -in:d:\data\20030607.csv or c:\new.xls -in:d:\data\20030607.csv と起動時に、例えばファイル名+パラメータで起動したい、 で、起動した.xls内のAuto_Open起動時に走るマクロで、 その値を使用したい、 そんな感じですか? 起動は、ユーザーさんが、ショートカットなどから起動? それともVBやAccessからExcelを開く? どちらでしょうか? ※Excelの起動オプション、私も見ましたが、 それらしきオプションがなぜか無かったですね・・・ excel.exe c:\new.xls -in:d:\data\20030607.csv みたいな起動はできないのかなぁ。 連続処理や固定のファイルを処理する場合、 c:\new.xls -u:営業 c:\new.xls -u:経理 なんて、感じで、起動時に処理分岐可能にできると いいのにね。 なんて答えてました。/* * 2.機能を調査してみる */
コマンドラインの引数、あってもよさそうなので、ヘルプで調査。 Excel の起動スイッチを設定する ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 起動時のオプション 入力する文字列 特定のブックを開く --------------- ブックのパス/ファイル名 特定のブックを読み取り専用で開く - /r ブックのパス/ファイル名 Excel の起動画面および新規ブックが表示されないようにする /e 作業フォルダを指定する ----------- /p フォルダのパス/フォルダ名 Office Safe モードを指定する ----- /safe あらら、これしか無いの? ^^^^^^^^^^^^^^^^^^^^^^^^ 起動するブックに引数を渡したいのに、、、 余談:Accessの起動オプション ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 今回の質問とあまり関係ないけど、Accessだと、コマンドラインオプションで、 /cmd ~~~~ ってオプションがあり、 コマンド ラインの後に、Command 関数から返される値が続くように指定します。 このオプションは、必ずコマンド ラインの最後に指定してください。/cmd の代わりに セミコロン (;) を使用することもできます。 このオプションを使用して、Visual Basic コードで使用可能なコマンド ライン引数を 指定します。 なんて、使えそうな便利なオプションがあります。 Command 関数 ^^^^^^^^^^^^ Access を起動したときに使われたコマンド ライン (コマンド ライン : アプリケーションを起動するための文字列のことです。)の引数を返します。 解説 コマンド ラインから Access を起動すると、/cmd オプションに続く部分がコマンド ラインの引数としてプログラムに渡されます。 Command 関数を使うと、プログラムに渡された引数を返すことができます。 必ずコマンド ラインの最後に指定がポイントです。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub aaa()
MsgBox "起動時に/cmdで指定したのは[" & Command & "]"
End Sub |
Private Sub Auto_open()
Dim sBuf As String
sBuf = Space$(255) 'バッファをスペース埋めで取る
'呪文じゃないが、GetCommandLine()関数を呼びlstrcpyでバッファにコピー
Call lstrcpy(sBuf, GetCommandLine())
'確認のため表示
MsgBox "起動方法は、[" & sBuf & "]です"
Debug.Print "[" & sBuf & "]"
End Sub |
↑表示された例
ショートカットを新たに作成してテストしてみますか。
"C:\Program Files\Microsoft Office\Office10\EXCEL.EXE" e:\work\vba086.xls 総務
↑ショートカット作成
テスト実行、出来るだろ?
あれれ、、、ダメだ。
予定では総務が渡ると思ったのに、、、
↑実行結果
これがウイルスの温床と噂のVBスクリプトってヤツですね。
よんでね.VBSとかファイル名を付けて、添付する・・なんてヤツですね。
まぁ、そんな話は、置いといて、
次の VBScript コードは、名前付きのコマンド ライン引数を表示する例です。
Set WshArguments = WScript.Arguments
Set WshNamed = WshArguments.Named
If WshNamed.Exists("a") Then
msgbox "A=" & WshNamed("a")
Else
Msgbox "引数Aが見つかりませんでした"
End If
で、Aの値を取れるんだぁ。
テストでまず、test.vbsのショートカットを作成します。
※右クリックでショートカット作成
作成したショートカットのプロパティを開きます。
↑ショートカットを右クリック、プロパティを選択
プロパティのリンク先に
~~~~~~~~~~~~~~~~~~~~
E:\Work\test.vbs /A:Ken3 /B:1234
と値を入れます。
↑リンク先に起動パラメータを代入
ダブルクリックして実行すると、パラメータが渡ったことが確認できます。
↑エラー画面
あっ、VBScriptって変数の型指定ができないんだっけ、
Dim oApp As Object
みたいに、As XXXXはダメなんだっけ、忘れてた。
これを取って、
えっ、まだダメなの?
oApp.Workbooks.Open FileName:="E:\work\vba086.xls"
の場所?
oApp.Workbooks.Open "E:\work\vba086.xls"
と引数の名前指定を外して見た(う〜ん、後で調査ですね)
無事、固定のファイルが開けたので、
今度はパラメータをFILE:E:\work\vba086.xlsで渡せるかチェックする。
ショートカットのリンクを
E:\Work\test.vbs /FILE:E:\work\vba086.xls
とファイル名をパラメータで渡すように変更してみた。
VBScript側で、ファイル名(引数)を受け取り、
そのファイルを開いてみた。
Dim oApp
Set oApp = CreateObject("Excel.Application")
oApp.Visible = True
'Only XL 97 supports UserControl Property
On Error Resume Next
oApp.UserControl = True
'引数のチェック、ファイルを開く
Set WshArguments = WScript.Arguments
Set WshNamed = WshArguments.Named
If WshNamed.Exists("file") Then
oApp.Workbooks.Open WshNamed("file") 'ファイルを開く
msgbox "File=" & WshNamed("file")
Else
Msgbox "引数Fileが見つかりませんでした"
End If
なんとか、ファイルを開くことが出来ました。
やりたいのは、彼女(Excel)にラブレター(パラメータ)を渡すんだっけ。
No.54 AccessからExcel開いて、処理終了後に閉じたい
http://www.ken3.org/backno/backno_vba11.html#54
で、.RUNってメソッドで、マクロを起動してたっけ。
受け取り側のExcelファイルを下記のように変更して、
^^^^^^^^^^^^^^^^^
Private Sub START(strP As String)
If IsEmpty(strP) Then 'パラメータ無しか?
'パラメータ無しの処理
MsgBox "パラメータ無しで起動されました"
Else
'パラメータありの処理
MsgBox "受け取ったのは" & strP & "です"
End If
End Sub |
↑ショートカットにパラメータを追加
VBScript側では、.Runメソッドを使用して、
STARTマクロを起動、パラメータを1つ渡します。
Dim oApp
Set oApp = CreateObject("Excel.Application")
oApp.Visible = True
'Only XL 97 supports UserControl Property
On Error Resume Next
oApp.UserControl = True
'引数のチェック、ファイルを開く
Set WshArguments = WScript.Arguments
Set WshNamed = WshArguments.Named
If WshNamed.Exists("file") Then
oApp.Workbooks.Open WshNamed("file") 'ファイルを開く
If WshNamed.Exists("p") Then
oApp.Run "START", WshNamed("p")
Else
Msgbox "引数Pを指定してください"
End If
Else
Msgbox "引数Fileを指定してください"
End If
ポイントは
~~~~~~~~~~
oApp.Run "START", WshNamed("p")
と、マクロ名と引数としてパラメータを渡してます。
実行すると、総務とExcelで受け取ることが出来ました。
↑実行結果
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。

下記のフォームからメッセージを送ることができます。
Blogとリンク:[三流君のMemo別館]/
[VBA 三流君のソースコード置き場]/
[Ken3Video YouTubeで動画解説]
気になったジャンル↓を選択してください。
人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。
Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です
Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。