2017-05-18 27 views
2

の行全体を貼り付けるとき、私は現在の問題に直面していると私は..VBA型が一致しません(実行時エラー13)データ

Private Sub Worksheet_Change(ByVal Target As Range) 
If Intersect(Target, Columns("B:B")) Is Nothing Then Exit Sub 

If Target.Value = "Yes" Then 
    Range(Range("A" & Target.Row), Range("I" & Target.Row)).Copy _ 
    Sheets("UpdateModify Forms").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) 
    Range(Range("AC" & Target.Row), Range("AU" & Target.Row)).Copy _ 
    Sheets("UpdateModify Forms").Range("J" & Rows.Count).End(xlUp).Offset(1, 0) 

ElseIf Target.Value = "No" Then 
    Range(Range("A" & Target.Row), Range("AB" & Target.Row)).Copy _ 
    Sheets("Development Forms").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) 
    Range(Range("AW" & Target.Row), Range("AY" & Target.Row)).Copy _ 
    Sheets("Development Forms").Range("AC" & Rows.Count).End(xlUp).Offset(1, 0) 

End If 
End Sub 

エラーが

If Target.Value = "Yes" Then 
に向いている理由さっぱりだが それがどのように動作するかを

私はデータで満たされた行を貼り付けるとき、それははいですまたはNo wheter権利によって、それが基準をチェックする必要があり、そのDISTにそれをソート啓発シート。

しかし

これは、いくつかの理由で実行時エラー13が登場..私は手動でのみデータを入力し、それが最初の検証をトリガーする列とキーを避けるためですそれを回避する方法を知っています最初に他のデータに、そして最後にその検証列に追加します。

もう一つ質問:

私は検証列LASTを入力することなく全体を印刷するとにかくはありますか?私は検証列を最初にキーしていたので、その横の行を埋め続けると、次のシートに表示されず、「はい」または「いいえ」だけが表示されます。

ありがとう、ありがとう!

+0

はTarget.Valueに時計を追加し、その型が何であるかを見ることができます。 – jivko

+0

「ターゲットとカラム(2)が何もない場合はExit Sub」と「Intersect(ターゲット、カラム(「B」)」を使用して試行した場合、「カラム2またはカラム2を試す」 – 0m3r

+0

)Nothing Then Exit Sub 'と同じエラーが表示され、同じ黄色が' Target.Value = Yes 'Then' – ZQ7

答えて

4

行全体を更新する場合、Targetは行全体になります。行全体が「はい」かどうかをテストすることはできません。単一のセルを調べる必要があります。他の質問については

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Columns("B")) Is Nothing Then Exit Sub 
    Dim cel As Range 
    For Each cel In Intersect(Target, Columns("B:B")).Cells 
     If cel.Value = "Yes" Then 
      Range(Range("A" & cel.Row), Range("I" & cel.Row)).Copy _ 
        Sheets("UpdateModify Forms").Range("A" & Sheets("UpdateModify Forms").Rows.Count).End(xlUp).Offset(1, 0) 
      Range(Range("AC" & cel.Row), Range("AU" & cel.Row)).Copy _ 
        Sheets("UpdateModify Forms").Range("J" & Sheets("UpdateModify Forms").Rows.Count).End(xlUp).Offset(1, 0)  
     ElseIf cel.Value = "No" Then 
      Range(Range("A" & cel.Row), Range("AB" & cel.Row)).Copy _ 
        Sheets("Development Forms").Range("A" & Sheets("Development Forms").Rows.Count).End(xlUp).Offset(1, 0) 
      Range(Range("AW" & cel.Row), Range("AY" & cel.Row)).Copy _ 
        Sheets("Development Forms").Range("AC" & Sheets("Development Forms").Rows.Count).End(xlUp).Offset(1, 0)  
     End If 
    Next 
End Sub 

行全体が記入された後にのみ、このプロセスを持つ方法があるかどうか、私はお勧めしますが、ボタンを持っているし、ユーザーを持つよう、彼らが終了したら、ボタンをクリックしてください - したがって、Worksheet_Changeイベントを回避します。または、最後の列を少なくともChangeをトリガする列にします。値を要求するコメントに反応して


Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Columns("B:B")) Is Nothing Then Exit Sub 
    Dim cel As Range 
    For Each cel In Intersect(Target, Columns("B:B")).Cells 
     If cel.Value = "Yes" Then 
      With Sheets("UpdateModify Forms") 
       With .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).EntireRow 
        .Range("A1:I1").Value = Rows(cel.Row).Range("A1:I1").Value 
       'I commented out the next two lines because I assume the 
       'last row in column A should be the same as the last row 
       'in column J - uncomment them if that is not the case. 
       'End With 
       'With .Range("J" & .Rows.Count).End(xlUp).Offset(1, 0).EntireRow 
        .Range("J1:AB1").Value = Rows(cel.Row).Range("AC1:AU1").Value 
       End With 
      End With 
     ElseIf cel.Value = "No" Then 
      With Sheets("Development Forms") 
       With .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).EntireRow 
        .Range("A1:AB1").Value = Rows(cel.Row).Range("A1:AB1").Value 
       'End With 
       'With .Range("AC" & .Rows.Count).End(xlUp).Offset(1, 0).EntireRow 
        .Range("AC1:AE1").Value = Rows(cel.Row).Range("AW1:AY1").Value 
       End With 
      End With 
     End If 
    Next 
End Sub 
+0

Omgであれば強調表示されます。どうもありがとう! (B:B))がNothing Then Exit Sub 'の場合、列(「B:B」)が列(「B」)に変更された場合、 ) – ZQ7

+0

@ user7809596 - おっと - 最初の文が単一行の「If」であることに気付かずに、答えを編集しました。注: '' B(B:B) ''と '' B '' 'と' '(2)'の間には違いはありません。 – YowE3K

+0

@ user7809596私はあなたの編集を承認しました(私が一行の 'If'のために間違いを修正していた場所を狂わせました)。そしてそれをどのように「改善」しましたか?あなたの名前に対して記録されています。私が言いました前にあなたが編集内容を提出したからです。 – YowE3K

0

複数のセルを選択すると、target.valueを使用しようとするとエラーになります。 selection.cells.count > 1の場合はtarget.valuesを使用してください。

0

最初の交差点が

によってがあれば、私は、変数に交差点を通過し

Dim MyTarget as range 
Set MyTarget = Intersect(Target, Columns("B:B")) 

次のチェックを提案

If MyTarget Is Nothing Then Exit Sub 

ヨーuが今

Dim EachCell as Range 
For Each EachCell in MyTarget 
'do your thing here 
Next 

を使用して、その変数をループ-Romcel

関連する問題