VBA';使用以单元格为范围定义符的Intersect方法的s工作表_更改函数

VBA';使用以单元格为范围定义符的Intersect方法的s工作表_更改函数,vba,excel,intersect,Vba,Excel,Intersect,当一个相关单元格被更改时,我试图使电子表格自动填充相应的单元格。 我刚刚将目标定义为: If Target.Address = "$A$5" then 没有问题。 但是,现在我的目标可以是多个单元格中的一个,我读到intersect方法应该可以处理这个问题,但是当我输入代码时: If Intersect(Target, Range(Cells(12,2), Cells(12,j-1))) Is Nothing Then (我正在尝试更改目标下方的单元格,目标是12B和12(j-1)之间的任

当一个相关单元格被更改时,我试图使电子表格自动填充相应的单元格。 我刚刚将目标定义为:

 If Target.Address = "$A$5" then
没有问题。 但是,现在我的目标可以是多个单元格中的一个,我读到intersect方法应该可以处理这个问题,但是当我输入代码时:

If Intersect(Target, Range(Cells(12,2), Cells(12,j-1))) Is Nothing Then
(我正在尝试更改目标下方的单元格,目标是12B和12(j-1)之间的任何单元格,其中j是先前定义的) 我得到以下错误: 运行时错误“1004”:应用程序定义的错误或对象定义的错误 但是从我可以看出,我的代码与周围的所有示例完全相同

我的完整代码是(尽管我的vlookup也可能有一个不相关的错误)

Private子工作表\u更改(ByVal目标作为范围)
如果Intersect(目标,范围(单元格(12,2),单元格(12,j-1))为空,则
如果我是空的(目标),那么
Target.Interior.ColorIndex=19
其他:
如果范围(“$A$13”).Value=”“,则
范围($A$13”).Value=“护理类型”
范围(“$A$13”)。Font.Bold=True
如果结束
Target.Interior.ColorIndex=xlNone
Target.Offset(1,0).Interior.ColorIndex=19
Target.Offset(2,0).Value=Application.WorksheetFunction_
VLookup(目标,板材(“板材2”)。范围($E$3:$F$6”),2)
Target.Offset(2,0).Font.Bold=True
i=2
直到空为止(单元格(11,i))

如果单元格(11,i).Value在使用Intersect确定您的区域中至少有一个单元格已更改后,您需要遍历匹配的单元格

关闭事件处理,否则当您开始更改工作表上的值时,工作表的更改将自动运行

Private Sub Worksheet_Change(ByVal Target As Range)

    If not Intersect(Target, Range(Cells(12, 2), Cells(12, 11))) Is Nothing Then
        on error goto safe_exit
        application.enableevents = false
        dim t as range
        for each t in Intersect(Target, Range(Cells(12, 2), Cells(12, 11)))
            If IsEmpty(t) Then
                t.Interior.ColorIndex = 19
            Else
                If Range("$A$13").Value = "" Then
                    Range("$A$13").Value = "Care Type"
                    Range("$A$13").Font.Bold = True
                End If
                t.Interior.ColorIndex = xlNone
                t.Offset(1, 0).Interior.ColorIndex = 19
                t.Offset(2, 0).Value = Application.WorksheetFunction. _
                    VLookup(Target, Sheets("Sheet2").Range("$E$3:$F$6"), 2)
                t.Offset(2, 0).Font.Bold = True

                i = 2
                'I really don't know what the following code is intended to do
                'probably better as a conditional formatting rule
                Do Until IsEmpty(Cells(11, i))
                    If Cells(11, i).Value <= ChildCount Then
                        Cells(12, i).Interior.ColorIndex = 19
                    End If
                i = i + 1
                Loop
            End If
        next t
    End If

safe_exit:
    application.enableevents = true

End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标、范围(单元格(12,2)、单元格(12,11))则为零
错误转到安全出口
application.enableevents=false
调光范围
对于相交的每个t(目标、范围(单元格(12,2)、单元格(12,11)))
如果我是空的,那么
t、 内饰颜色指数=19
其他的
如果范围(“$A$13”).Value=”“,则
范围($A$13”).Value=“护理类型”
范围(“$A$13”)。Font.Bold=True
如果结束
t、 Interior.ColorIndex=xlNone
t、 偏移量(1,0)。内部颜色索引=19
t、 偏移量(2,0).Value=Application.WorksheetFunction_
VLookup(目标,板材(“板材2”)。范围($E$3:$F$6”),2)
t、 偏移量(2,0)。Font.Bold=True
i=2
我真的不知道下面的代码打算做什么
'作为条件格式规则可能更好
直到空为止(单元格(11,i))

If Cells(11,i).Value总是有助于发布实际代码。If NOT Intersect(…)不算什么。谢谢,我已经添加了我的其余代码,并且我也尝试使用If NOT Intersect,但是在单元格(12,j-1)中得到了相同的错误,If Is 1代码发生错误。在哪里定义了
j
?你说是的,但它必须在不同的代码块中完成。。。您可以使用
Debug.Print
检查它是否已重置为1或0或类似的傻事。谢谢,但我想我已经找到了错误的原因。这是因为,在回答另一个问题之前,j不会被定义,所以当我从头开始运行电子表格时,它不知道j是什么。如果你知道我该如何解决这个问题,那就太好了!
Private Sub Worksheet_Change(ByVal Target As Range)

    If not Intersect(Target, Range(Cells(12, 2), Cells(12, 11))) Is Nothing Then
        on error goto safe_exit
        application.enableevents = false
        dim t as range
        for each t in Intersect(Target, Range(Cells(12, 2), Cells(12, 11)))
            If IsEmpty(t) Then
                t.Interior.ColorIndex = 19
            Else
                If Range("$A$13").Value = "" Then
                    Range("$A$13").Value = "Care Type"
                    Range("$A$13").Font.Bold = True
                End If
                t.Interior.ColorIndex = xlNone
                t.Offset(1, 0).Interior.ColorIndex = 19
                t.Offset(2, 0).Value = Application.WorksheetFunction. _
                    VLookup(Target, Sheets("Sheet2").Range("$E$3:$F$6"), 2)
                t.Offset(2, 0).Font.Bold = True

                i = 2
                'I really don't know what the following code is intended to do
                'probably better as a conditional formatting rule
                Do Until IsEmpty(Cells(11, i))
                    If Cells(11, i).Value <= ChildCount Then
                        Cells(12, i).Interior.ColorIndex = 19
                    End If
                i = i + 1
                Loop
            End If
        next t
    End If

safe_exit:
    application.enableevents = true

End Sub