2016-10-20 11 views
0

複数の列に、このマクロを含む新しいブックにコピーしたいデータがあるワークブックが2つあります。基本的には、現在のワークブック「z」を開いてマクロを実行し、他の2つの既存のワークブックからデータを移動/コピーできるようにします。Excel VBA - 複数の列を2つのブックから1つのブックにコピーする

私はここでさまざまなアイデアを探しています。私はこのコードを実行すると「実行時エラー1004」になってしまいました。エラーは、最初のy.Range行で発生し、私はまだ理由を把握する必要があります。

「x」ブックから「y」ではなくデータを正常に取得できました。

私はVBAに新しいので、どんな助けでも大歓迎です。

おかげで、

Sub SellPrice() 

Dim x As Worksheet, y As Worksheet, z As Worksheet, LastRow& 

Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\PRODUCT.XLS") 
Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\GrossProfit.xls") 

Set x = Workbooks("PRODUCT.XLS").Worksheets("ProductFile") 
Set y = Workbooks("GrossProfit.xls").Worksheets("Sellprice") 
Set z = Workbooks("SellPriceMacro.xlsm").Worksheets("Sheet1") 

LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row 

x.Range("B4:B" & LastRow).Copy z.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
x.Range("C4:C" & LastRow).Copy z.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0) 
x.Range("K4:K" & LastRow).Copy z.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0) 

LastRow = y.Cells.SpecialCells(xlCellTypeLastCell).Row 

y.Range("B2:B" & LastRow).Copy z.Cells(Rows.Count, "E").End(x1Up).Offset(1, 0) 
y.Range("C2:C" & LastRow).Copy z.Cells(Rows.Count, "F").End(x1Up).Offset(1, 0) 
y.Range("D2:D" & LastRow).Copy z.Cells(Rows.Count, "G").End(x1Up).Offset(1, 0) 
y.Range("H2:H" & LastRow).Copy z.Cells(Rows.Count, "H").End(x1Up).Offset(1, 0) 

Application.CutCopyMode = False 

End Sub 

答えて

0

あなたがRange()を使用する前に、ワークシートを置く方法を参照してください? (y.Range(...)) - あなたはCells()Rows.Count、およびColumns.Count(および他の範囲)を使用するたびにこれを行う必要があります。それ以外の場合は、ActiveSheetが何であってもそれを調べて、それを使用します。アクティブシートと非アクティブシートを混在させると、エラーが発生します。

Sub SellPrice() 

Dim x As Worksheet, y As Worksheet, z As Worksheet, LastRow& 

Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\PRODUCT.XLS") 
Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\GrossProfit.xls") 

Set x = Workbooks("PRODUCT.XLS").Worksheets("ProductFile") 
Set y = Workbooks("GrossProfit.xls").Worksheets("Sellprice") 
Set z = Workbooks("SellPriceMacro.xlsm").Worksheets("Sheet1") 

LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row 

x.Range("B4:B" & LastRow).Copy z.Cells(z.Rows.Count, "A").End(xlUp).Offset(1, 0) 
x.Range("C4:C" & LastRow).Copy z.Cells(z.Rows.Count, "B").End(xlUp).Offset(1, 0) 
x.Range("K4:K" & LastRow).Copy z.Cells(z.Rows.Count, "C").End(xlUp).Offset(1, 0) 

LastRow = y.Cells.SpecialCells(xlCellTypeLastCell).Row 

y.Range("B2:B" & LastRow).Copy z.Cells(z.Rows.Count, "E").End(xlUp).Offset(1, 0) 
y.Range("C2:C" & LastRow).Copy z.Cells(z.Rows.Count, "F").End(xlUp).Offset(1, 0) 
y.Range("D2:D" & LastRow).Copy z.Cells(z.Rows.Count, "G").End(xlUp).Offset(1, 0) 
y.Range("H2:H" & LastRow).Copy z.Cells(z.Rows.Count, "H").End(xlUp).Offset(1, 0) 

Application.CutCopyMode = False 

End Sub 
+0

私は間違ってあなたの応答を読んでいる場合を除き、コードは私がレンジの前に、ブックを入れているので、 'y.Range' –

+0

が、これは' Cells'、 '行を取り除くためにクリーンアップすることができ動作するはずです。カウント?私はこれを実行しようとしても、すべてのブック "x"行を削除しようとしましたが、それでも同じエラーが発生します。多分私はWorkbook "y"を考えていますか? –

+0

@ T.SmithはSOへのコピー/貼り付けだけですか?また、コードに '.end(x1up)'があります... 'l'ではなく' '1 'であることに注意してください。 – BruceWayne

関連する問題