2016-08-19 23 views
0

複数のワークシートの同じ場所にあるフィルタリングされたテーブルに行を挿入し、すべての内容をコピーすることができる正しいVBAコードを取得しようとしています。上の行全体。Excel VBA複数のシートに行を挿入してデータをコピーする

ブック内の各シートに関連するチェックボックスがあります。チェックボックスをオンにすると、このシートに行が挿入されます。

このシートはパスワードで保護されています。パスワードは、ファイル内の別のワークシートにあります。

私はほとんどこれを動作させました。私のファイルは次の場所にあります。

https://drive.google.com/file/d/0B5HnHgSNFkFid0gwbDNMOFN1NUU/view?usp=sharing

次のようにコードは次のとおりです。

Sub Insert_Rows() 

    Dim sh As Worksheet 

    For Each sh In Sheets 
     If sh.Name = "Sheet1" And Worksheets("Sheet4").Range("D1").Value = True Or _ 
      sh.Name = "Sheet2" And Worksheets("Sheet4").Range("D2").Value = True Or _ 
      sh.Name = "Sheet3" And Worksheets("Sheet4").Range("D3").Value = True Then 
      With sh 
      .Unprotect Password:=Worksheets("Sheet4").Range("A1") 
       .Cells(ActiveCell.Row, 4).EntireRow.Insert 
       .Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 4)).FillDown 
       .Protect DrawingObjects:=True, contents:=True, Scenarios:=True, Password:=Worksheets("Sheet4").Range("A1") 
      End With 
     End If 
    Next sh 

End Sub 

私が午前問題はない上記のすべての行からのデータが中であるということですコピーされます。 5列目のデータはコピーされません。私はそれがコードの中の4と関係があると確信しています.Cells(ActiveCell.Row, 4)。列の数にかかわらず上の行全体をコピーする必要があります。

大変助かりました。

おかげ

答えて

0

、代わりに、カラム1とカラム4との間のちょうど範囲、EntireRowをFillDown置き換えることも.Rows(ActiveCell.Row).FillDownのように書くことができる

.Cells(ActiveCell.Row, 1).EntireRow.FillDown 

.Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 4)).FillDown 

と( )


注:

ActiveCell.Rowは必ずしもSheet1、Sheet2、またはSheet3上の特別な場所を参照しているわけではありません。

現在アクティブなセルがSheet4のセルG67の場合、ActiveCell.Rowは67と評価され、Sheet1(および/またはSheet2および/またはSheet3)の行66がSheet1の新しく挿入された行にコピーされます(および/またはSheet2のおよび/またはシート3) - それは魔法のようにシート1に行58を挿入し、Sheet2の上82行することを決定していないだろう、など

あなたが持っているだけ問題は、行全体があるということであるならば満たされていない場合は、上記の解決方法で修正されます。しかし、の間違った行が満たされていることがわかった場合は、行の選択方法を再考する必要があります。

+0

私はあなたが持っている別の問題、つまり、それぞれのシートに行が挿入されている場所にヒットしたと思います。 私が必要とするものを試してみましょう。ユーザーは、シート4のチェックボックスをクリックして、使用するシートを選択します。そのポイントのシート1,2、および3は、すべて同じデータを表示します。データは特定の行のみを表示するようにフィルタリングされます。 これで、選択したシートの1つの行を選択して複製できる必要があります。重複行は、選択されたすべてのシートの同じポイントに挿入され、選択された行からデータをコピーします。 – Mustapha

+0

@Mustapha - ユーザーがセルを選択して(つまり、どの行を参照しているかを示す情報を入力して)、行を挿入するコードを実行するボタンなどを押すと、問題はありません。 (セルを選択する前にシート4のチェックボックスをクリックしたと仮定します)。ただし、コードが一度実行されると、シート1と2と3は同じデータを持たなくなります。別のセル/行に対して繰り返されると、問題が発生します。それが必要な場合は、おそらくデザインを考え直す必要があります。 – YowE3K

関連する問題