エクセルのファイルを開くだけで、
操作とかは一切せずに、開いたらそのまま開きっ放しで
次のほかの処理へ進むということはできるでしょうか?
参照設定とかは環境に依存するので、あまりしたくありません
よろしくお願いします。
できます。
エクセルを開くこと自体、環境に依存してるんだけどね。
すみません、
方法を教えていただけませんか・・・?
レイトバインディング、Excel等をキーワードにググッてみればサンプルが見つかると思います。
Dim objExcel As Object
'EXCEL起動
Set objExcel = CreateObject("Excel.Application")
'EXCELファイルをオープン
objExcel.Workbooks.Open FileName:="[エクセルのファイル]"
ありがとうございます。
やってみたのですが、ファイルのロックはされているようですが
開いて表示されないです。
レイトハンディングで検索してみます。
すみません objExcel.Visible = True で表示できるようになりました。
もしかしたらレイトハンディングでもシートの操作ができるのかな?
エクセルに対してパラメータを渡せないので困っていました。
もしかしたら、セルに値を書き込むことで渡せるかも・・・
> もしかしたらレイトハンディングでもシートの操作ができるのかな?
レイトハンディングではなく『レイトバインディング』です。
『遅延バインディング』とも言います。
CreateObject はこちらの方法になります。
この反対が『事前バインディング』。さきに参照設定を行う方法です。
ちなみに、どちらでもシートの操作、セルの操作等、
問題なく行えます。
> エクセルに対してパラメータを渡せないので困っていました。
> もしかしたら、セルに値を書き込むことで渡せるかも・・・
エクセルを開くときに起動引数を渡したいのでしょうか?
それでしたら、ShellやShellExecuteで十分ですが。
エクセルを開いて操作をしたいのであれば、
CreateObjectですね。
ありがとうございます。
>エクセルを開くときに起動引数を渡したいのでしょうか?
>それでしたら、ShellやShellExecuteで十分ですが。
>エクセルを開いて操作をしたいのであれば、
>CreateObjectですね。
その通りです。Shellでよかったのですか・・・
どうやればいいかわかりませんでした。
objExcel.Workbooks.Open FileName:="[エクセルのファイル]"
の方法で、エクセルを起動した場合、マクロが
実行されません。
エクセル側のAuto_open関数が動かなくて困っています。
何か方法はございますでしょうか?
CreateObjectでファイルを開いた場合、
マクロは実行されませんので、
開いたあと自分でコールしてやる必要があります。
エクセル側に全ての処理が書かれており、
実行するだけでいいのであれば、
Call ShellExecute(Me.hwnd, "Open", "C:\Book1.xls", "", "", SW_SHOWNORMAL)
と書けば、Excelが起動されて、Book1.xlsが開かれます。
これならば、Auto_Openも起動します。
もちろんShellでもできますが、こちらの場合、
Excel.exeのフルパスを指定しなければいけないため、
ShellExecuteのほうが無難かと思います。
但し、ExcelファイルがExcel以外に関連付けられていたり、
Excelそのものがインストールされていないと開きませんが。
そういう意味では、例えこちらを使おうとも、
環境に依存する、といえるかもしれません。
また、一つお詫びしなければいけないことが。
Excel.exeに起動引数を与えることはできても、
Excelファイルに起動引数を与えることはどうやらできないようですね。
少し考えれば分かるような当たり前のようなことでした。
失礼致しました。
起動時に、Excelファイルへ起動引数を与えたい場合、
CreateObjectでファイルを開き、
実行したいマクロをコールする際、関数の引数として
パラメータを渡してやる以外には、引数を渡せれないような気がします。
但し、これは厳密には起動引数にはなりませんが。
割り込み失礼します。
>参照設定とかは環境に依存するので、あまりしたくありません
レイトバインディングなら、やはり、CreateObject で、オートメーション
オブジェクトを取得したほうが楽ですね。
Dim xlApp
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Visible =True
.Workbooks.Open ("C:\My Documents\Sample1.xls")
.Run ("Auto_Open")
End With
Set xlApp = Nothing
パラメータを加えるなら、
例えばですが、
.Run("Auto_Open)
のところを
.Run "TestProc", Arg1
として、EXCEL側の標準モジュールで、
Sub TestProc(ByVal Arg1 As Variant)
・
・
End Sub
などと、すればよいと思います。
ただし、引数は、30個までだったと思います。
もちろん、取り扱いが、値だけでしたら、配列にして、EXCELのセルに渡す
なら、引数は1つで、一度に渡せます。なお、配列は二次元で添え字は、
1からです。ただ、配列でも、あまり大きなものは失敗すると思います。
それと、EXCEL側では、起動引数とは呼ばないと思います。
ツイート | ![]() |