エクセルファイルを開くだけ


zedan  2004-11-10 05:27:36  No: 86587

エクセルのファイルを開くだけで、
操作とかは一切せずに、開いたらそのまま開きっ放しで
次のほかの処理へ進むということはできるでしょうか?

参照設定とかは環境に依存するので、あまりしたくありません

よろしくお願いします。


。。。  2004-11-10 05:41:47  No: 86588

できます。
エクセルを開くこと自体、環境に依存してるんだけどね。


zedan  2004-11-10 05:44:56  No: 86589

すみません、
方法を教えていただけませんか・・・?


。。。  2004-11-10 05:57:39  No: 86590

レイトバインディング、Excel等をキーワードにググッてみればサンプルが見つかると思います。

Dim objExcel As Object

'EXCEL起動
Set objExcel = CreateObject("Excel.Application")
'EXCELファイルをオープン
objExcel.Workbooks.Open FileName:="[エクセルのファイル]"


zedan  2004-11-10 06:11:56  No: 86591

ありがとうございます。
やってみたのですが、ファイルのロックはされているようですが
開いて表示されないです。

レイトハンディングで検索してみます。


zedan  2004-11-10 06:16:32  No: 86592

すみません      objExcel.Visible = True  で表示できるようになりました。
もしかしたらレイトハンディングでもシートの操作ができるのかな?
エクセルに対してパラメータを渡せないので困っていました。

もしかしたら、セルに値を書き込むことで渡せるかも・・・


raki  URL  2004-11-10 18:18:17  No: 86593

> もしかしたらレイトハンディングでもシートの操作ができるのかな?
レイトハンディングではなく『レイトバインディング』です。
『遅延バインディング』とも言います。
CreateObject はこちらの方法になります。
この反対が『事前バインディング』。さきに参照設定を行う方法です。

ちなみに、どちらでもシートの操作、セルの操作等、
問題なく行えます。

> エクセルに対してパラメータを渡せないので困っていました。
> もしかしたら、セルに値を書き込むことで渡せるかも・・・
エクセルを開くときに起動引数を渡したいのでしょうか?
それでしたら、ShellやShellExecuteで十分ですが。
エクセルを開いて操作をしたいのであれば、
CreateObjectですね。


zedan  2004-11-14 01:58:07  No: 86594

ありがとうございます。

>エクセルを開くときに起動引数を渡したいのでしょうか?
>それでしたら、ShellやShellExecuteで十分ですが。
>エクセルを開いて操作をしたいのであれば、
>CreateObjectですね。
その通りです。Shellでよかったのですか・・・
どうやればいいかわかりませんでした。

objExcel.Workbooks.Open FileName:="[エクセルのファイル]"
の方法で、エクセルを起動した場合、マクロが
実行されません。
エクセル側のAuto_open関数が動かなくて困っています。

何か方法はございますでしょうか?


raki  URL  2004-11-14 16:03:56  No: 86595

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でファイルを開き、
実行したいマクロをコールする際、関数の引数として
パラメータを渡してやる以外には、引数を渡せれないような気がします。
但し、これは厳密には起動引数にはなりませんが。


Wendy  2004-11-17 12:47:59  No: 86596

割り込み失礼します。

>参照設定とかは環境に依存するので、あまりしたくありません
レイトバインディングなら、やはり、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側では、起動引数とは呼ばないと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加