2016-12-06 22 views
0

これを動作させようとしていましたが、これまでできなかったし、検索したところで、どちらかというと、ここに行く。Excel、VBA:値が1シートで変化したときに他のシートを参照する(交差点)

私は3枚使用しています。

「wsPunting」(値の変更1)
「wsDetail」(すべての完全なデータを持つシート)
「wsData」(私はマクロをつかむ特定のデータを格納シート)

今私がやっているのは、wsPuntingのB2セルでValueが変更されたときです(B2はマクロで作成されたデータ検証であり、これが貴重な情報であるかどうかはわかりませんが、 )、wsDetailでデータをフィルタリングし、カラム "O3:O"を取得し、重複を削除し、wsPuntingのセルB5のデータ検証にそれを割り当てます。

< 20個の値が入力されたときに私はすでに動作するようになっています。今、私がwsDetailで使用しようとしていた実際のデータを貼り付けたとき、私はIntersectで "Type Mismatch"を取得し続けました。

私はすでにそれを修正するかもしれないが、いくつか試してみたが、見つけられないようだ。


Private Sub Worksheet_Change(ByVal Target As Range) 

    Application.ScreenUpdating = False 

    On Error GoTo Booboo 

    Dim rngFSU As Range 
    Dim vFSU As Range 
    Dim wsPunting As Worksheet, wsData As Worksheet, wsDetail As Worksheet 

    Set wsPunting = ActiveWorkbook.Sheets("Puntingsblad") 
    Set wsData = ActiveWorkbook.Sheets("Data") 
    Set wsDetail = ActiveWorkbook.Sheets("Detail") 

    Set rngFSU = wsPunting.Range("$B$2") 
    Set vFSU = wsPunting.Range(Target.Address) 

'The next line is where it keep dropping the error 
    If Not Intersect(rngFSU, vFSU) Then 

     wsDetail.Range("A2", wsDetail.Range("A3").SpecialCells(xlCellTypeLastCell)).AutoFilter Field:=1, Criteria1:=Range("B2").Value 
     wsDetail.Range("O3", wsDetail.Range("O3").SpecialCells(xlCellTypeLastCell)).Copy 

     wsData.Range("B2").PasteSpecial xlPasteValues 
     wsData.Range("B2", wsData.Range("B1").End(xlDown)).RemoveDuplicates Columns:=Array(1) 

     With wsPunting.Range("B5").Validation 
      .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=Data!" & wsData.Range("B2", wsData.Range("B1").End(xlDown)).Address 
      .IgnoreBlank = True 
     End With 

     wsDetail.Range("A2", wsDetail.Range("A3").SpecialCells(xlCellTypeLastCell)).AutoFilter Field:=1 
    End If 

Booboo: 
    MsgBox err.Description 
End Sub 

これは私が通常より速く学ぶためにそれを固定し、自分自身を試してみてくださいconcidering、実際に私の最後の手段です。しかし、私はこれほど長い間、これに執着してきました。私は今も気にしません。

事前に乾杯。

答えて

1

If Not Intersect(rngFSU, vFSU) Then

Intersect(rngFSU, vFSU)あなたはブールにそれをキャストしようとしている、タイプRangeの目的です。

これはエラーになります。交差点がないかどうかをチェックしたいと思いますが、Intersectで返されたRangeはNothingです。だからこれを試してください:

If Intersect(rngFSU, vFSU) Is Nothing Then 
+0

ありがとうございます。私はすでにコードがどのように動作しているかを知っていました。私は「何もない」という事実を何とか愚かに逃しました。または、たぶん、タッチパッドのためにノートパソコンで誤って削除してしまった可能性があります。 – SierraA

+0

うん、私たち一人一人に毎日起こるもの。それは喜んで:) –

関連する問題