既存のシートを新しいファイルにコピーして保存するには?

解決


魚武  2006-06-28 18:39:24  No: 132071

既存のExcelファイルのシートを新しいファイルにコピーして保存したいと思い、以下のプログラムを作成しました。

Private Sub Command1_Click()
    Dim ExcelApp    As New Excel.Application    'エクセルを宣言する
    Dim Book        As Object
    Dim strConnect  As String
    Dim strConnect2 As String
    Dim intSheetCnt As Integer  'シート数
    Dim blnRet      As Boolean  '戻り値

    strConnect = "C:\Excel04\Book.xls"
    strConnect2 = "C:\Excel12\Book1.xls"
    Set Book = CreateObject("Excel.Application")
    Book.Application.Visible = False
    Book.Application.Workbooks.Open FileName:=strConnect    '指定したファイルを開く
    Book.Worksheets(Book.Worksheets.Count).Copy             '最後尾のシートを新規ブックへコピー
    Book.ActiveSheet.Name = "ブック"                        'シート名を設定
    
    '名前をつけて保存
    Book.ActiveWorkbook.SaveAs FileName:=strConnect2, FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
    Book.ActiveWorkbook.Close
    
    Book.Workbooks(strConnect).Close SaveChanges:=False ←

    ExcelApp.Quit
    Set ExcelApp = Nothing
End Sub

しかし、コピー元のファイルを閉じるソース(矢印部分)が上手く起動されず、
開いたままプログラムが終了されて以降そのファイルを開こうとしても常に
「使用中」になってしまいます。
保存元ファイルを上手く終了させるにはどうしたらよいのでしょうか?


VB梅  2006-06-29 02:43:36  No: 132072

魚武さんへ
Dim ExcelApp    As New Excel.Application    'エクセルを宣言する
Set Book = CreateObject("Excel.Application")'またエクセルを宣言している

上記、2行の意味がわかれば終了しますよ。


魚武  2006-06-29 03:21:53  No: 132073

Private Sub Command1_Click()
    Dim Book        As New Excel.Application    'エクセルを宣言する
    Dim strConnect  As String
    Dim strConnect2 As String
    Dim intSheetCnt As Integer  'シート数
    Dim blnRet      As Boolean  '戻り値

    strConnect = "C:\VB\LRB0130テスト\Excel\Excel04\Book.xls"
    strConnect2 = "C:\VB\LRB0130テスト\Excel\Excel12\Book1.xls"
    Book.Application.Visible = False
    Book.Application.Workbooks.Open FileName:=strConnect    '指定したファイルを開く
    Book.Worksheets(Book.Worksheets.Count).Copy             '最後尾のシートを新規ブックへコピー
    Book.ActiveSheet.Name = "ブック"                        'シート名を設定
    
    '名前をつけて保存
    Book.ActiveWorkbook.SaveAs FileName:=strConnect2, FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
    Book.ActiveWorkbook.Close
    Book.Workbooks(1).Close SaveChanges:=False  ←
    Book.Quit
    Set Book = Nothing
End Sub

VB梅さんの指示通りExcelの宣言をBookのみにして矢印部分も「Workbooks(strConnect)」から「Workbooks(1)」に
変更したら上手くいきました。

Workbooksはファイル名を指定する必要は無かったんですね。


特攻隊長まるるう  2006-06-29 20:13:38  No: 132074

VB から Excel を操作する場合、
>ActiveSheet
>ActiveWorkbook
といった Active〜系のプロパティや Selection は極力使用を避けます。
>「Workbooks(1)」に変更したら
これも、複数の WorkBook を扱うのであれば好ましくありません。

>    Dim Book        As New Excel.Application    'エクセルを宣言する
宣言を見れば分かるように、Excel.Application ですから、Excel.Workbook と
混同するような変数名は使用を避けるべきです。

http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200606/06060089.txt
参考にしてください。


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

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






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