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