2017-03-03 8 views
0

VBAボタンを使用して、別のExcelファイルからいくつかのシートをターゲットファイルにインポートし、他のシートの後に追加したいとします。私はいくつかの点を検討してきましたが、これはソリューションに最も近いものです。しかし、1つの特定の行にどのように記述するかによって、1つの問題が残っています(cf. commentingを参照)。既存のExcelファイルへのExcelシートのインポートを1つのもの以外にする

Private Sub Importer_Click() 
    Dim directory As String 
    Dim import As String 
    Dim curr_file As String 
    Dim source As Workbook 
    Dim sheet As Worksheet 
    Dim total As Integer 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    directory = "C:\Users\...\" 
    import = Dir(directory & "*.xl??") 

    curr_file = ActiveWorkbook.Name 
    Do While import <> "" 
     Set source = Workbooks.Open(directory & import) 

     For Each sheet In source.Sheets 
      total = Workbooks(curr_file).Worksheets.Count 
      sheet.Copy After:=Workbooks(curr_file).Sheets(total) 
     Next sheet 

     Workbooks(import).Close ' alternative 1: works smooth, files close, but sheets are not added 
     Workbooks(directory & import).close ' alternative 2: sheets are added, but importing files remain open (because the 'directory' is not needed in fact) + I get a runtime error 9 (subscript out of range) 

     import = Dir() 
    Loop 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
End Sub 

回答は単純です(私は比較的VBAに新しいです)。誰が助けることができますか?

ありがとうございます!

+0

おそらく 'source.Close SaveChanges:= True' ...? – Jeeped

答えて

1

オープンしたときにソースブックにブックオブジェクトを設定しました。この決定的なオブジェクト参照を使用して、これを閉じ、変更を保存するように指定します。

source.Close SaveChanges:=True 
+0

ご回答いただきありがとうございます。残念ながら、それはそのトリックをしませんでした。新しいことは起こりません。 curr_fileは、Excelシートをインポートするファイルと、ソースファイル/ブックがシートの抽出元となる方法です。何が間違っているかもしれないという他の提案?変数を確認するメッセージボックスを追加しました。シート名、Excelファイルと新しいシートの総数はうまく更新されているようです。 – sborms

関連する問題