Vba 用户窗体中的命令按钮,根据列表框中的选择删除多行
我目前正在开发一个userform,它有一个“clearprocess”命令按钮。我的想法是,我的userform有一个列表框,它将列出所有当前进程 从这里,用户将选择要从工作表中清除的流程(删除与流程相关的所有行) 嵌入在代码中,我使用了单词“Lisa”作为前一个userform的参考点,使用offset函数知道进程名称应该是哪个单元格 我希望能够使用“丽莎”一词,一旦用户确定了要删除的进程。这将始终是找到“Lisa”的那一行和下面的19行 我已经开始编写一些代码,但是当根据用户的选择试图查找“Lisa”时,我遇到了一个问题Vba 用户窗体中的命令按钮,根据列表框中的选择删除多行,vba,excel,Vba,Excel,我目前正在开发一个userform,它有一个“clearprocess”命令按钮。我的想法是,我的userform有一个列表框,它将列出所有当前进程 从这里,用户将选择要从工作表中清除的流程(删除与流程相关的所有行) 嵌入在代码中,我使用了单词“Lisa”作为前一个userform的参考点,使用offset函数知道进程名称应该是哪个单元格 我希望能够使用“丽莎”一词,一旦用户确定了要删除的进程。这将始终是找到“Lisa”的那一行和下面的19行 我已经开始编写一些代码,但是当根据用户的选择试图查找
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
是否为nothing。因此,您可以避免一个错误:
If Not findValue Is Nothing Then
findValue.EntireRow.Delete
End If
如果要使代码更进一步,请记住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
如果类型名称(选择)“范围”,则
MsgBox“未选择范围!”
出口接头
如果结束
如果您在流程中使用,这在您的案例中几乎是强制性的,那么您可以执行以下操作:
Sub DeleteNamedRange(rngName As String)
Range(rngName).ClearContents
ThisWorkbook.Names(rngName).Delete
End Sub
通过以下方式调用子项
:
Call DeleteNamedRange("Lisa")