dポイントプレゼントキャンペーン実施中!

ExcelのVBAでブックを追加し保存を行っています。
その際、保存は、どこに行うのがよいのですか

bookですか。sheetですか。
両方で、SaveAsができまが、使い分けがあるのでしょうか。
どのように使い分けするのでしょうか。


Workbooks.Add
ActiveSheet.Name = "サンプル"

ActiveSheet.SaveAs OutFileName
ActiveWorkbook.SaveAs OutFileName
ActiveWorkbook.Close

A 回答 (3件)

#2の回答者です。



>bookですか。sheetですか。
>両方で、SaveAsができまが、使い分けがあるのでしょうか。
私は、使い分けは知りません。Sheetで使ったこともありません。
Sheetに対してSaveAsを使ったら、ブックを保存しているようです。一般的には、コードでも、Bookに対して、SaveAs を施すものだと思いますね。その方が読みやすいです。

ご質問者さんが、そういう方法もあって使いたいというのなら、私は問題点はないだろうと思うだけです。ただ、私なら、そういう場合は、Copyを使いますね。

例:
ActiveSheet.Copy
ActiveWorkbook.SaveAs "Test121231.xls"

Bookなら、SaveAs です。

> OutSheet.SaveAs Filename:=OutFileName ←いらないのでは?
> OutBook.SaveAs Filename:=OutFileName
> OutBook.Close

ただ、これって、二重にしてはいませんか?
    • good
    • 0

こんにちは。



#1さんの回答を読ませていただいて、実際の違いは私は知りませんでしたが、ActiveSheet.SaveAs "○○○" という方法は、私は使ったことがありません。

それにご質問のコードは、省略しているいう「ことわり」がない限りは、不自然に感じます。

データのあるシートのみを保存したい、とした場合に、マクロではどうするか、ということになるはずです。そうしたら、私なら、

そのシートを宛先のないコピーをして、ブックを作り、その時点で、保存する、ということになります。

'//
Sub Test1()
 '元のブックから新しいブックにデータを写し、保存
 ActiveSheet.Copy
 With ActiveWorkbook
   .SaveAs "TestBook_A.xls"
   .Close
 End With
End Sub
'//
Sub Test2()
 '元のブックから新しいブックにデータを写し、CSVとして保存
 ActiveSheet.Copy
 With ActiveWorkbook
   .SaveAs "TestBook_B.csv", FileFormat:=xlCSV
   .Close False
 End With
End Sub

'//

この回答への補足

住所録Aと住所録Bがあります。
AとBを比較して、差異をを別ファイルに出力しようとしています。
比較元となるファイルは、AでもBでもかまいません。
比較、判定、ファイルへの出力部分は、省略していますが、保存
する場合は、どこに行うのがよいのですか

bookですか。sheetですか。
両方で、SaveAsができまが、使い分けがあるのでしょうか。
どのように使い分けするのでしょうか。

書き方、使い方のおかしいところを指摘して頂くとありがたい
です。

---------------------------------------------------------------------------------------------------
Option Explicit
Sub test()
Dim ret As Integer
Dim row1 As Long
Dim col1 As Long
Dim row2 As Long
Dim col2 As Long

Dim myRtn As Boolean
Dim fno1 As String
Dim fno2 As String

Dim OutBook As New Workbook
Dim OutSheet As New Worksheet
Dim OutFileName As String

Dim cnt As Integer
Dim I As Integer

ret = MsgBox("処理を開始します。" + Chr(13) + Chr(10) + "よろしいですか。?", _
vbYesNo + vbQuestion)
If ret = vbNo Then
End
End If

myRtn = Application.Dialogs(xlDialogOpen).Show
If myRtn = False Then
MsgBox "[キャンセル]が選択されました" & vbCr & _
"処理を終了します"
Exit Sub
End If
fno1 = Application.ActiveWorkbook.Name

myRtn = Application.Dialogs(xlDialogOpen).Show
If myRtn = False Then
MsgBox "[キャンセル]が選択されました" & vbCr & _
"処理を終了します"
Exit Sub
End If
fno2 = Application.ActiveWorkbook.Name

Set OutBook = Workbooks.Add
Set OutSheet = ActiveSheet
OutBook.Worksheets(1).Name = "テスト"
OutFileName = "テスト.xls"


With Application.Workbooks(fno1).Worksheets(1)
row1 = 1
col1 = 1
cnt = 1

Do While .Cells(row1, 1) <> ""
処理
(省略)
Loop
End With

MsgBox "処理が終了しました。", vbOKOnly + vbInformation, "確認"

Application.Workbooks(fno1).Close
Application.Workbooks(fno2).Close

OutSheet.SaveAs Filename:=OutFileName
OutBook.SaveAs Filename:=OutFileName
OutBook.Close
End Sub
---------------------------------------------------------------------------------------------------

OutSheet.SaveAs Filename:=OutFileName
or
OutBook.SaveAs Filename:=OutFileName

のどちらでも保存ができます。
また、書き方、使い方のおかしいところを指摘して頂くとありがたいです。

補足日時:2012/12/11 09:01
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/12/13 20:10

機能が違うのは間違いない、下に解説を読むと使い分けがあるようだが、(最後の)こういうのもあるので、Workbooks.SaveAsが安全、ということでは??



http://www.happy2-island.com/excelsmile/smile03/ …

http://www.happy2-island.com/excelsmile/smile03/ …
~~~
実際に保存するときはWorkbooks.SaveAsメソッドを使います。
~~~
ちなみに、CSVファイルを選択したときは、選択しているワークシート(ActiveSheet)をCSV形式で保存します。

ExcelVBAでテキスト保存
http://oshiete.goo.ne.jp/qa/2700825.html
CSV形式で保存するときは、
  Sheets("test").Activate
  ActiveSheet.SaveAs Filename:=ActiveSheet.Name & ".csv", _
    FileFormat:=xlCSV, CreateBackup:=False
でtest.csvに保存できますが、
単純にテキストファイルとして保存したいときに
  Sheets("test").Activate
  ActiveSheet.SaveAs Filename:=ActiveSheet.Name & ".txt", _
    FileFormat:=xlText, CreateBackup:=False
としても、実行時に下記のエラーになってしまいます。
  実行時エラー '1004'
  アプリケーション定義またはオブジェクト定義のエラーです。
また、CSVで保存した時も開いているファイルがtest.csvに変わってしまいますが、できれば、開いているファイルは元のファイルのままでシートだけを保存するにはSaveAsメソッドではなく、他のメソッドを使うのでしょうか?
(hogehoge.xlsのtestシートを保存してもhogehoge.xlsが開いたままにしたい)
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/12/11 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!