Excel,VBA:当一个表中的值更改时引用其他表(交叉)

我一直试图让这个工作,但我不能这么远,search后,我不能find一个在线解决scheme,所以在这里。

我有3张我正在使用。

“wsPunting”(值改变的那个)
“wsDetail”(带有完整数据的表格)
“wsData”(存储我用macros获取的特定数据的工作表)

现在,我想要做的是,当wsPunting中的单元格B2中的值发生变化时(B2是使用macros进行的数据validation,不知道这是否是有价值的信息,但为了以防万一,最好放在这里)我在wsDetail中过滤我的数据,抓住列“O3:O”,删除重复,并将其分配到wsPunting中单元格B5中的数据validation。

当我input<20的值时,我已经得到了这个工作。 现在,当我粘贴在wsDetail中使用的实际数据时,我一直在Intersect上出现“Type Mismatch”。

我已经尝试了一些东西,我可能可能会修复它,但我似乎无法find它。


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 

这实际上是我最后的手段,我通常会自己试着修复它以更快地学习。 但是我已经坚持了这个已经很久了,我只是不能再atm了。

提前欢呼。

If Not Intersect(rngFSU, vFSU) Then

Intersect(rngFSU, vFSU)是一个Rangetypes的对象,您试图将其转换为布尔值。

这导致错误。 我知道你想检查是否没有交集,在这种情况下,由Intersect返回的Range是Nothing 。 所以试试这个:

  If Intersect(rngFSU, vFSU) Is Nothing Then