Excel,VBA:当值在1张中更改时引用其他表格(相交)

时间:2016-12-06 02:42:28

标签: excel vba excel-vba macros

我一直试图让这个工作,但我不能到目前为止,搜索后我也无法在网上找到解决方案,所以在这里。

我正在使用3张纸。

“wsPunting”(值变化的那个)
“wsDetail”(表格中包含所有内容的完整数据)
“wsData”(我存储我用宏抓取的某些数据的工作表)

现在,我正在尝试做的是,当wsPunting中的单元格B2中的值发生更改时(B2是使用宏进行的数据验证,不确定这是否是有价值的信息,但最好将其放在此处case),我在wsDetail中过滤我的数据,抓取列“O3:O”,删除重复项,并将其分配到wsPunting中单元格B5中的数据验证。

当我输入了<20个值时,我已经开始工作了。现在,当我粘贴我将要在wsDetail中使用的实际数据时,我不断在相交上获得“类型不匹配”。

我已经尝试过一些事情,但我可能会修复它,但我似乎无法找到它。

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

这实际上是我的最后一招,请注意我通常会尝试自行修复以便更快地学习。但是我已经被困在这个问题已经很久了,我就不能再这么做了。

提前干杯。

1 个答案:

答案 0 :(得分:1)

  

const submitHandler = (e) => { const query = $('#query').val() || e.target.value const url = 'https://api.fashion.net/colors/' // shorthand GET request $.getJSON(url, (json, textStatus) => { // ... do stuff with response ... }) .done(() => { // ... do stuff when done ... }) .fail(err => { console.log('error: ', err); }) } // handle user query on 'search' click $('#submit').click(submitHandler) // handle user query on 'enter' pressed // NOTE: invalidates default action $('#query').keyDown((e) => { if (e.keyCode === 13) { // kill browser default e.preventDefault() // run submit handler submitHandler(e) // exit return } })

If Not Intersect(rngFSU, vFSU) ThenIntersect(rngFSU, vFSU)类型的对象,您试图将其转换为布尔值。

这会导致错误。我知道您要检查是否没有交叉点,在这种情况下,Range返回的范围是Intersect。所以试试这个:

Nothing