我正在处理一个电子表格,该电子表格利用用户输入来填写表格。此数据输入到具有许多列的表中。我有一个命令按钮,用于创建新行并插入新订单项所需的所有数据验证(以下是示例)。
我的问题与其他单元格基于“是”或“否”字符串所依赖的特定列(蓝色圆圈)有关。如果该列为“是”,则相邻的单元格会执行某项操作。如果该列为“否”,则相邻的单元格将执行其他操作。
随着该表在行中的增长,我关注的列范围将动态变化。如果工作表使用“ Worksheet_Change(ByVal Target As Range)”子项在该动态范围内遇到更改事件,我希望VBA代码能够运行。
现在,我在commandbutton_click子项中定义了动态范围,因为每次单击按钮时,都会添加一个新行,因此我需要电子表格了解我的范围已更改(请参见下面的代码)。
Sub CommandButton1_Click()
Application.EnableEvents = False
Dim LastRowEntry As Long
Dim DeviceNo As Integer
'Dim RTUTable As Range
'Determine the last entry row & Copy
LastRowEntry = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
DeviceNo = Sheet1.Cells(Rows.Count, 1).End(xlUp)
Sheet1.Cells(Rows.Count, 1).End(xlUp).EntireRow.Copy
'Once the last row is determined, go to the next row to paste
Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValidation
'Incase the above cell has Conditional Formatting, we set the color back to "white"
Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow.Interior.ColorIndex = 0
Application.CutCopyMode = False
ActiveCell.Value = DeviceNo + 1
With RTUTable
RTUTable = Sheet1.Range(("G7"), Sheet1.Cells(LastRowEntry + 1, "G"))
End With
Application.EnableEvents = True
End Sub
然后,在另一个子栏中输入代码,将“检查”该动态范围的值是否更改为“是”或“否”。在此输入我定义的动态范围(请参见下面的代码)。
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
有人可以帮助我解决我收到的错误消息“类型不匹配”吗?我是否将动态范围正确输入到相交代码中?
谢谢
****更新-有关澄清的更多信息*****
我已在要评估的数组中添加了一些信息。下面是我的电子表格的快照。
进入调试模式时,我正在查看“本地表”,并看到我已成功将信息捕获到数组中。
我需要对此数组运行相交命令
答案 0 :(得分:0)
此问题已解决。下面是我用来确定动态范围的代码,然后该代码评估该范围的变化。
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
总结: