vba - 用户窗体中的命令按钮根据列表框中的选择删除多行
问题描述
我目前正在开发一个具有“清除进程”命令按钮的用户表单。这个想法是我的用户表单有一个列表框,它将列出所有当前进程。
从这里用户将选择他/她想从工作表中清除的过程(删除与过程相关的所有行)。
嵌入在代码中,我使用“Lisa”这个词作为前一个用户窗体的参考点,以使用 offset 函数知道进程名称应该是哪个单元格。
一旦用户确定要删除的进程,我希望能够使用“Lisa”这个词。这将始终是找到“Lisa”的行和下面的 19 行。
我已经开始了一些代码,但是当试图根据用户所做的选择来查找“Lisa”时,我遇到了一个问题。
Private Sub ClearButton_Click()
Dim findvalue As Range
Dim cDelete As VbMsgBoxResult
'hold in memory
Application.ScreenUpdating = False
'check for values
If Emp1.Value = "" Or Emp2.Value = "" Then
MsgBox "There are no processes to delete"
Exit Sub
End If
'confirm process should be deleted
cDelete = MsgBox("Are you sure you want to delete this process?", vbYesNo)
If cDelete = vbYes Then
'find the process to be deleted
'''''''set findvalue =
'''''''delete entire process
findvalue.EntireRow.Delete
End If
End Sub
希望这是足够的信息,任何帮助将不胜感激:)
解决方案
像这个一样小的东西会将范围设置为找到的值并将其删除:
Public Sub TestMe()
Dim findValue As Range
Set findValue = Selection.Find("Lisa")
findValue.EntireRow.Delete
End Sub
作为一种好的做法,您可以findValue
在删除之前检查是否不是空的。因此,您可以避免错误:
If Not findValue Is Nothing Then
findValue.EntireRow.Delete
End If
如果您想让代码更进一步,请记住参数的默认值After
是Find()
第一个单元格。因此,Find()
始终从第二个单元格开始查找。为避免这种情况,并从第一个单元格开始查看,After:=
显式传递参数被认为是一种好习惯:
Public Sub TestMe()
Dim findValue As Range
Dim selectedValue As Range
Set selectedValue = ActiveSheet.Range(Selection.Address)
With selectedValue
Set findValue = .Find("Lisa", after:=.Cells(.Cells.Count))
End With
If Not findValue Is Nothing Then
findValue.EntireRow.Delete
End If
End Sub
为了使代码更加“有趣”,可以决定检查是否选择了范围(也可以选择形状)。因此,TypeName(Selection)
可以与这样的东西一起使用:
If TypeName(Selection) <> "Range" Then
MsgBox "Range is not selected!"
Exit Sub
End If
推荐阅读
- python - modbus-tk 得到 Modbus 错误:异常代码 = 3
- r - 如何创建一个从 R 中的另一列连续求和的新列?
- php - Codeigniter Right Join with Where 条件不给出结果
- angular - 避免未使用的资产 Angular
- visual-studio-code - 我的 vs code python 路径显示了 2 个不同的路径?一白一蓝
- r - R data.table - 如何按降序指定变量?
- javascript - 如何解决javascript幻灯片在angularjs路由后不自动显示
- r - R工作室中的小提琴情节
- javascript - Outlook Online 如何下载附件?
- ios - 从 ChildViewController 呈现 UIAlertViewController