C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 別名で保存をするには


(過去ログ 99 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■58875 / inTopicNo.1)  別名で保存をするには
  
□投稿者/ ダイ (1回)-(2011/05/01(Sun) 16:58:36)

分類:[VBScript] 

ど素人です。

以下の内容のファイルを【newfile.vbs】のファイル名で保存して開いたときに
既存のエクセルファイルを開いて書き込みを行い、別名で保存をしたいと思っています。
仕事で必要になり急いでいろんなサイトで調べてみたのですがうまくいきません。
バージョンも良くわからない状態です。


Dim Excel, xlSheet
Set Excel = CreateObject("Excel.Application")
Excel.Workbooks.Open ("C:\Book1.xls")
Set xlSheet = Excel.Worksheets(1)
Excel.Visible = True
xlSheet.Cells(1, 1).Value = "123"
Excel.SaveAs "C:\Book2.xls"     ←これが『サポートされていないプロパティまたはメソッド』となり実行できません。
Set objExcel = Nothing
Set xlSheet = Nothing

宜しくお願いします。

引用返信 編集キー/
■58876 / inTopicNo.2)  Re[1]: 別名で保存をするには
□投稿者/ 魔界の仮面弁士 (2161回)-(2011/05/01(Sun) 19:04:46)
No58875 (ダイ さん) に返信
> ←これが『サポートされていないプロパティまたはメソッド』となり実行できません。
SaveAs メソッドを持っているのは、
Excel の Application オブジェクトではなく、Workbook オブジェクトです。

ですから、ファイルを開くコードを
> Excel.Workbooks.Open ("C:\Book1.xls")
から
  Dim xlBook
  Set xlBook = Excel.Workbooks.Open("C:\Book1.xls")
のようにして、Workbook オブジェクトを変数に受け取っておき、
保存部のコードを
> Excel.SaveAs "C:\Book2.xls"
ではなく、
  xlBook.SaveAs "C:\Book2.xls" 
にしてやれば良いかと。


> Set objExcel = Nothing
objExcel という変数は宣言されていません。変数 Excel の間違いでしょうか?

> 宜しくお願いします。
起動した Excel を終了させなくて良いのですか?

引用返信 編集キー/
■58881 / inTopicNo.3)  Re[2]: 別名で保存をするには
□投稿者/ ダイ (2回)-(2011/05/02(Mon) 09:56:06)
お返事ありがとうございます。
教えていただいた内容から以下のように変更しました。

Dim Excel, xlBook, xlSheet

Set Excel = CreateObject("Excel.Application")
Set xlBook = Excel.Workbooks.Open("C:\Users\acer\Desktop\Book1.xls")
Set xlSheet = Excel.Worksheets(1)
Excel.Visible = False

xlSheet.Cells(1, 1).Value = "123"

xlBook.SaveAs("C:\Users\acer\Desktop\Book2.xls")
xlBook.Close

Set Excel = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing


エクセルはこれで勝手に終了しているような気がします。
これにエクセルを終了するメソッドを追記するほうが良いでしょうか?
引用返信 編集キー/
■58883 / inTopicNo.4)  Re[3]: 別名で保存をするには
□投稿者/ ペニー (2回)-(2011/05/02(Mon) 11:26:09)
No58881 (ダイ さん) に返信

その状態では、Excelは Excel.Visible = False で非表示になっているだけで、閉じていません。
excel vba quitでぐぐってみてください。
引用返信 編集キー/
■58884 / inTopicNo.5)  Re[3]: 別名で保存をするには
□投稿者/ 魔界の仮面弁士 (2162回)-(2011/05/02(Mon) 13:51:50)
No58881 (ダイ さん) に返信
> 教えていただいた内容から以下のように変更しました。
今回の変数名ミスなどを無くすためにも、
Option Explicit 宣言を付与されることをおすすめします。

> xlBook.SaveAs("C:\Users\acer\Desktop\Book2.xls")
VScript や VBA では、戻り値を受け取らないメソッドの呼び出しに
括弧を付与してはいけません。すなわち、
 xlBook.SaveAs "C:\Users\acer\Desktop\Book2.xls"
のように表記するか、もしくは Call ステートメントを併用して
 Call xlBook.SaveAs("C:\Users\acer\Desktop\Book2.xls")
とするのがが、正しい表記となります。

今回、括弧付きで呼び出せたのは、引数が 1 つだけだったため、
引数群を囲む括弧の意味ではなく、単一の式として評価されていたからです。


> xlBook.Close
先程はこのコードはありませんでしたよね?

> これにエクセルを終了するメソッドを追記するほうが良いでしょうか?
明示的に Quit した方が良いと思います。
引用返信 編集キー/
■58886 / inTopicNo.6)  Re[4]: 別名で保存をするには
□投稿者/ ダイ (3回)-(2011/05/02(Mon) 16:57:13)
お返事ありがとうございます。

戻り値を受け取る、受け取らないというのがよく理解出来ないのですが、
とりあえず
xlBook.SaveAs "C:\Users\acer\Desktop\Book2.xls"
に変更しました。

VBScriptでBook1.xlsを開く前に、すでにユーザーがエクセルを使用している場合、
エクセルを終了すると困るのではないかと思ったのですがそれは気にしなくても良いのでしょうか?
VBScriptを実行する時点でエクセルを使用しているかチェックをして
していない場合のみ終了するということはできるのでしょうか?
引用返信 編集キー/
■58887 / inTopicNo.7)  Re[5]: 別名で保存をするには
□投稿者/ 魔界の仮面弁士 (2163回)-(2011/05/02(Mon) 18:59:21)
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 で、
キーボードやマウス等の介入を一時的に排除しておくのも手です。
引用返信 編集キー/
■58945 / inTopicNo.8)  Re[6]: 別名で保存をするには
□投稿者/ ダイ (4回)-(2011/05/06(Fri) 11:36:20)
お返事ありがとうございます。
教えていただいた内容で修正しました。

Dim Excel, xlBook, xlSheet
Set Excel = CreateObject("Excel.Application")
Set xlBook = Excel.Workbooks.Open("C:\Users\acer\Desktop\Book1.xls")
Set xlSheet = Excel.Worksheets(1)
Excel.Visible = False
xlSheet.Cells(1, 1).Value = "123"
xlBook.SaveAs "C:\Users\acer\Desktop\Book2.xls"
xlBook.Close
Excel.Quit
Set Excel = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

今回はじめてVBScriptを使うことになりわからない事だらけですが、何が出来るのかがぼんやりと分かってきましたので
勉強して使っていけるようになりたいと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -