|
■No58886 (ダイ さん) に返信 > 戻り値を受け取る、受け取らないというのがよく理解出来ないのですが、
'戻り値を受け取る呼び出し例 ret = MsgBox("TEST?", vbYesNoCancel) '変数retに vbYes, vbNo, vbCancel のいずれかが渡される
'戻り値を受け取らない呼び出し例 Call MsgBox("TEST?", vbYesNoCancel) MsgBox "TEST?", vbYesNoCancel
'これはエラーになる(括弧をつけてはいけない) 'MsgBox("TEST?", vbYesNoCancel)
上記では MsgBox 関数を例に挙げていますが、Excel のメソッドに対しても同様です。
> VBScriptでBook1.xlsを開く前に、すでにユーザーがエクセルを使用している場合、 今回のコードでは、ユーザーが操作している Excel を操作しているわけではなく、 新規に Excel を起動してそれを操作していますので、ユーザー操作とは競合しません。
とはいえ、開こうとしている Book1.xls がすでに使用中だった場合には、それを Workbooks.Open する際に エラーもしくは警告が発生する可能性がありますので、そこは On Error ステートメントを通じて、 適宜エラー対処のコードを記述する必要があるでしょう。 (同様に、保存時にも書き込みエラーが起きる可能性はあるので、そちらも処置する必要があります)
なお、新たに Excel を起動するのではなく、すでに起動済みのExcelを取り扱いたいのであれば、 CreateObject ではなく、GetObject を用いたコーディングが必要になります。(若干異なるコードになります)
> エクセルを終了すると困るのではないかと思ったのですがそれは気にしなくても良いのでしょうか?
一応、プログラムから起動した Excel が、ユーザーによって追加操作されてしまう可能性もありますが、 短時間の処理であれば、ユーザーが介入する前に保存処理まで終了してしまうかと思いますし、 そもそも処理中にユーザー操作を受け入れさせたくないのなら、.Interactive = False で、 キーボードやマウス等の介入を一時的に排除しておくのも手です。
|