Dynamic 用于相交目标的动态范围

Dynamic 用于相交目标的动态范围,dynamic,range,intersect,Dynamic,Range,Intersect,我正在制作一个利用用户输入填写表格的电子表格。此数据输入到一个表中,表中需要许多列。我有一个命令按钮,用于创建新行并插入新行项目所需的所有数据验证(下面是一个示例) 我的问题围绕一个特定的a列(蓝色圆圈),其他单元格依赖于“是”或“否”字符串。如果列中有“是”,则相邻单元格将执行某些操作。如果列有“否”,则相邻单元格会执行不同的操作 当这个表成行增长时,我关注的列范围将动态变化。如果工作表在该动态范围内使用“工作表更改(ByVal目标为范围)”子项遇到更改事件,我希望VBA代码运行 现在,我在

我正在制作一个利用用户输入填写表格的电子表格。此数据输入到一个表中,表中需要许多列。我有一个命令按钮,用于创建新行并插入新行项目所需的所有数据验证(下面是一个示例)

我的问题围绕一个特定的a列(蓝色圆圈),其他单元格依赖于“是”或“否”字符串。如果列中有“是”,则相邻单元格将执行某些操作。如果列有“否”,则相邻单元格会执行不同的操作

当这个表成行增长时,我关注的列范围将动态变化。如果工作表在该动态范围内使用“工作表更改(ByVal目标为范围)”子项遇到更改事件,我希望VBA代码运行

现在,我在commandbutton\u click sub中定义动态范围,因为每次单击按钮时,都会添加一个新行,因此我需要电子表格知道我的范围已更改(请参阅下面的代码)

然后,在另一个子模块中输入代码,该代码将“检查”动态范围的值是否有变化,并给出“是”或“否”的回答。这就是我输入定义的动态范围的地方(请参见下面的代码)

有人能帮我解决我收到的错误消息“类型不匹配”吗?我是否在intersect代码中正确输入了动态范围

多谢各位

****更新-更多信息供澄清*****

我在正在评估的数组中添加了一些信息。下面是我的电子表格的快照

当我进入调试模式时,我正在查看我的“本地表”,并看到我正在成功地捕获数组中的信息


我需要用这个数组运行intersect命令,这个问题已经解决了。下面是我用来确定动态范围的代码,然后代码计算该范围的变化

Dim dyString As String
Dim dyRange As Range
Dim LastRowEntry_1 As Integer
Dim i As Integer

LastRowEntry_1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(-2, 0).row + 1

dyString = "G8:G" & LastRowEntry_1
Set dyRange = Range(dyString)

If Not Intersect(Target, dyRange) Is Nothing Then
    For i = 1 To 6
        If ActiveCell.Value = "NO" Then
            Target.Offset(0, i).Interior.ColorIndex = 23
            Target.Offset(0, i).Font.Color = vbWhite
            Target.Offset(0, i).Value = "N/A"
            Target.Offset(0, i).Locked = True
        ElseIf ActiveCell.Value = "YES" And ActiveCell.Offset(0, i).Value = "N/A" Then
            Target.Offset(0, i).Value = ""
            Target.Offset(0, i).Interior.ColorIndex = 0
            Target.Offset(0, i).Font.Color = vbBlack
            Target.Offset(0, i).Locked = False
总结如下:

  • 不管怎样,我的动态范围始终从单元格“G8”开始
  • 在此之后,范围将动态变化。根据具体情况,范围将增大或减小 因此,我的“LastRowEntry_1”决定了最后一个单元格条目的位置 由于我的电子表格上有一些页脚信息,不得不将其抵消)
  • 我创建了一个字符串,可以将固定单元格的范围与动态单元格的范围结合起来 牢房
  • 然后我将该字符串设置为一个范围
  • 然后基于目标范围是否相交,我运行一个“For”循环来执行 我的条件格式

避免发布代码的图像,因为这样做会使测试人员无法复制和粘贴代码,并减少人们使用代码的机会。相反,请复制代码并将其粘贴到此处,以便希望帮助您的人员更容易使用。非常感谢您提供的提示。
Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

'This code checks to see if the Device is polled by RTU
    If Not Intersect(Target, Range(RTUTable)) Is Nothing Then

            If ActiveCell.Value = "NO" Then
               "DO SOMETHING"
            Else
              "DO SOMETHING"
            End If
    End If
Application.EnableEvents = True
End Sub
Dim dyString As String
Dim dyRange As Range
Dim LastRowEntry_1 As Integer
Dim i As Integer

LastRowEntry_1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(-2, 0).row + 1

dyString = "G8:G" & LastRowEntry_1
Set dyRange = Range(dyString)

If Not Intersect(Target, dyRange) Is Nothing Then
    For i = 1 To 6
        If ActiveCell.Value = "NO" Then
            Target.Offset(0, i).Interior.ColorIndex = 23
            Target.Offset(0, i).Font.Color = vbWhite
            Target.Offset(0, i).Value = "N/A"
            Target.Offset(0, i).Locked = True
        ElseIf ActiveCell.Value = "YES" And ActiveCell.Offset(0, i).Value = "N/A" Then
            Target.Offset(0, i).Value = ""
            Target.Offset(0, i).Interior.ColorIndex = 0
            Target.Offset(0, i).Font.Color = vbBlack
            Target.Offset(0, i).Locked = False