【发布时间】:2019-01-20 12:26:22
【问题描述】:
我正在制作一个利用用户输入来填写表格的电子表格。该数据被输入到需要许多列的表中。我有一个命令按钮,可以创建一个新行并插入新行项目所需的所有数据验证(下面是一个示例。)
我的问题在于特定的列(蓝色圆圈),其他单元格基于“是”或“否”字符串依赖该列。如果该列有“是”,则相邻单元格会执行某些操作。如果列有“否”,则相邻的单元格会做不同的事情。
随着此表按行增长,我关注的列范围将动态变化。如果工作表使用“Worksheet_Change(ByVal Target As Range) sub 在该动态范围内遇到更改事件,我希望 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
有人可以帮我解决我收到的错误消息“类型不匹配”吗?我是否在相交代码中正确输入了动态范围?
谢谢
****更新 - 用于澄清的更多信息*****
我在我正在评估的数组中添加了一些信息。下面是我的电子表格的快照。
当我进入调试模式时,我正在查看我的“Locals 表”,并看到我成功地将我的信息捕获到一个数组中。
我需要用这个数组运行 intersect 命令
【问题讨论】:
-
避免发布您的代码图片,因为它会导致无法复制和粘贴以供他人测试,并减少人们使用它的机会。相反,请复制代码并将其粘贴到此处,以便希望帮助您的人更容易地帮助您。
-
感谢 Fabulous 的提示。