2016-12-20 6 views
1

私はここ数ヶ月間、以下のコードをうまく使っています。しかし、ワークシートのダイナミックレンジを選択しているため、ワークシートにない場合は、選択メソッドのクラスクラスが失敗してしまったことがわかりました。withループvbaで動的行を選択しないようにする方法

次のコードが失敗した:

With w.Sheets("Sheet1") 
     n = .Cells(Rows.Count, 2).End(xlUp).Row 
     .Range("Y2:AI2").Copy 
     .Cells(n, 25).Select 
     .Range(Selection, Selection.End(xlUp).Offset(1, 0)).PasteSpecial xlPasteFormulas 
     .Application.CutCopyMode = False 
    End With 

次のコードは成功します

With w.Sheets("Sheet1") 
     n = .Cells(Rows.Count, 2).End(xlUp).Row 
     .Range("Y2:AI2").Copy 
     Sheets("Sheet1").Select 
     .Cells(n, 25).Select 
     .Range(Selection, Selection.End(xlUp).Offset(1, 0)).PasteSpecial xlPasteFormulas 
     .Application.CutCopyMode = False 
    End With 

私は再びシートを選択する必要があります。理想的には私は選択/アクティブ化を避けたい!

右手のステアリングは大変ありがとう!

+0

を試してみてください、あなたが実際にその細胞シートに_be_する必要があると思いれる '.Cells(nは、25).Select'書によるものです。しかし、あなたはそのセルを選択する必要はありません:私の答えを参照 – user3598756

+0

実際には、 '.Select'の使用が必須であるケースはほとんどありません。 [Excelマクロでの選択の使用を避ける方法](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)を参照してください。 –

答えて

4

あなたはシートを選択するために必要な_apparent_この

With w.Sheets("Sheet1") 
    .Range("Y2:AI2").Copy 
    With .Cells(.Cells(Rows.count, 2).End(xlUp).row, 25) 
     .Parent.Range(.Cells, .End(xlUp).Offset(1, 0)).PasteSpecial xlPasteFormulas 
    End With 
    .Application.CutCopyMode = False 
End With 
+0

ありがとう。親の財産について説明してもらえますか?これは完全に働いた – user1

+0

あなたは大歓迎です。 'With Range(" A10 ")ブロック内で' _Rimple(... ')ステートメントは_referenced_' range'を基準にした 'range'を指し示します。 Range( "A1:A10")はセルA10:A19を指します).Parent.Range(...はExcelモデルオブジェクト階層の1つのレベルを上にして 'worksheet'オブジェクトに到達します(例: 'Range(" A10 ")ブロックの中で、Parent.Range(" A1:A10 ")'はセルA1:を指しています) A10、ついに!)。 – user3598756

関連する問題