2017-04-10 15 views
0

私はこのワークベースのプロジェクトを使用して、VBAが自動的に選択列を別のワークブック内の特定のワークシートにコピーします。VBA別のブックにExcelの列をコピーしてファイルを閉じます

Sub Macro2() 
MsgBox "It's working 2" 


Dim incidentDataColumnC As Range, SpecificDataColumnA As Range 

Set incidentDataColumnC = Workbooks("01 - January 2017 Incident Data.csv").Worksheets(1).Columns("C") 
Set SpecificDataColumnA = Workbooks.Open("Z:\****\Real Test\01 - January 2017 Service Desk Reports.xlsx").Worksheets(3).Columns("A") 

incidentDataColumnC.Copy Destination:=SpecificDataColumnA 
SpecificDataColumnA.Parent.Close 

Dim incidentDataColumnE As Range, SpecificDataColumnB As Range 

Set incidentDataColumnE = Workbooks("01 - January 2017 Incident Data.csv").Worksheets(1).Columns("E") 
Set SpecificDataColumnB = Workbooks.Open("Z:\****\Real Test\01 - January 2017 Service Desk Reports.xlsx").Worksheets(3).Columns("B") 


incidentDataColumnE.Copy Destination:=SpecificDataColumnB 
SpecificDataColumnB.Close 

Dim incidentDataColumnH As Range, SpecificDataColumnC As Range 

Set incidentDataColumnH = Workbooks("01 - January 2017 Incident Data.csv").Worksheets(1).Columns("H") 
Set SpecificDataColumnC = Workbooks.Open("Z:\****\Real Test\01 - January 2017 Service Desk Reports.xlsx").Worksheets(3).Columns("C") 

incidentDataColumnH.Copy Destination:=SpecificDataColumnC 
SpecificDataColumnC.Close 
.... 
.... 
MsgBox "It ran" 
End Sub 

コードは、それが列をコピーすることによってになっている働きをしますが、それは先のファイルが既に開かれているというエラーで戻ってきます。

このエラーを回避する方法を見つけて、可能であれば、コピー手順の実行後に各ファイルを閉じることをお勧めします。

私は単純な.Closeコマンドを試しましたが、サポートされていないというエラーが表示されます。

+1

簡単な答えは、3回ではなく1回ブックを開きます。 – YowE3K

+0

いくつかのオブジェクト変数を宣言し、私たちに連絡してください:https://msdn.microsoft.com/en-us/library/office/gg251791.aspx – Absinthe

+1

'SpecificDataColumnC'は' Range'です。あなたは 'SpecificDataColumnC .Close'、 'SpecificDataColumnB'と同じです。また、上記を参照してください。 –

答えて

2

ワークブックオブジェクトを使用してワークブックを追跡する必要があります。個々の範囲にオブジェクトを割り当てるのではなく、範囲を直接コピーするだけで、コードを単純化することもできます。

Sub Macro2() 
    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    MsgBox "It's working 2" 

    Set wb1 = Workbooks("01 - January 2017 Incident Data.csv") 
    Set wb2 = Workbooks.Open("Z:\****\Real Test\01 - January 2017 Service Desk Reports.xlsx") 

    wb1.Worksheets(1).Columns("C").Copy wb2.Worksheets(3).Columns("A") 
    wb1.Worksheets(1).Columns("E").Copy wb2.Worksheets(3).Columns("B") 
    wb1.Worksheets(1).Columns("H").Copy wb2.Worksheets(3).Columns("C") 
    '.... 
    '.... 
    wb2.Close 
    MsgBox "It ran" 
End Sub 
+0

これは機能しましたが、変更を保存するプロンプトが表示されます。変更を保存してプロンプトを表示させない方法がありますか? –

+1

@DylanF - はい、 'Close'メソッドには、変更を保存するかどうかを指定するパラメータがあります。たとえば、 'wb2.Close SaveChanges:= True'と言うことができます。 (私はあなたの質問のコードにそれを含めなかったので、私はそれを含めていなかったので、ユーザに変更を保存するかどうかを選択させたいと思っていました) – YowE3K

+0

実際にはコピーされませんでした。あなたの解決策に欠けているステップがありますか? –

関連する問題