2017-01-24 1 views
1

私はいくつかの入力をモデルにコピーし、その答えを最初のシートにコピーしようとしています。以下はコードです。 "data_sheet"は入力が多いシートで、 "Final Model"は出力します。その非常に単純な;私は "data_sheet"から "最終モデル"にデータをコピーしようとしています。 "data_sheet"への回答をコピーしようとすると、エラー1004が発生します。最初の部分だけがうまくいく。あなたはwksDestwksDestがアクティブでない限り、必ず失敗しますアクティブワークシート、からCellsを使用して範囲を定義しようとしているので、はvbaランタイムエラー1004を凌駕します。私はコード内で選択をしていません

Private Sub CommandButton1_Click() 


    Dim wksSource As Worksheet, wksDest As Worksheet 
    Dim rngStart As Range, rngSource As Range, rngDest As Range 
    Dim rngStart2 As Range, rngSource2 As Range, rngDest2 As Range 

For i = 1 To 6 

    Set wksSource = ActiveWorkbook.Sheets("data_sheet") 
    Set wksDest = ActiveWorkbook.Sheets("Final Model") 

    Set rngSource = wksSource.Range(Cells(5, 3 + i - 1), Cells(23, 3 + i - 1)) 
    'Paste Data Values 
    Set rngDest = wksDest.Range("C14") 
    rngSource.Copy 
    rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 


'Till this code works. Now i just trying to reverse copy 

    Set rngSource2 = wksDest.Range(Cells(38, 4), Cells(40, 4)) 
    Set rngDest2 = wksSource.Range(Cells(29, 3 + i - 1), Cells(31, 3 + i - 1)) 
    rngSource2.Copy 
    rngDest2.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Next i 

答えて

1

あなたがエラーを取得する理由があります。だから、この文:

Set rngSource2 = wksDest.Range(Cells(38, 4), Cells(40, 4)) 

は、実はこれは言う:

Set rngSource2 = wksDest.Range(ActiveSheet.Cells(38, 4), ActiveSheet.Cells(40, 4)) 

そして範囲は避けるために、(他の特別の措置を取らずに)別のシート上のセルを使用して1枚の用紙に定義することはできませんので、 Resize方法を使用して

With wksDest 
    Set rngSource2 = .Range(.Cells(38, 4), .Cells(40, 4)) 
End With 
With wksSource 
    Set rngDest2 = .Range(.Cells(29, 3 + i - 1), .Cells(31, 3 + i - 1)) 
End With 

以上の直接的なアプローチ:それは、あなたがWithブロックそうのように使用することができます

Set rngSource2 = wksDest.Cells(38,4).Resize(3) 
Set rngDest2 = wksSource.Cells(29, 3 + i - 1).Resize(3) 

上記の両方の方法では、1004エラーの可能性が高い修飾されていないCellsオブジェクトが回避されます。また

、あなただけの値をコピーしているので、あなたがそうのように、代わりにcopypastespecialの単純な値の割り当てを行うことができます

rngDest2.Value = rngSource2.Value 
+0

は、実際にあなたの第2のアプローチは、働いていました。ありがとう:) – SAM244776

+0

'.Cells'に注意を払う - あなたはシートに明示的に修飾するために' .'を使う必要がありますが、私は第2のアプローチ –

関連する問題