我是VBA编码的真正新手并且一直都做得很好但是我现在已经在我的最终(并且可能比它需要的更复杂)工作表的宏上打了一堵墙。我一直试图让它在整个周末通过多次谷歌搜索工作,并使用stackoverflow的其他问题的各种答案来编译我自己的脚本,但无济于事。这是我到目前为止(道歉编码器,我知道这看起来像是由一个3岁的孩子写的):
Sub Build_Delete()
Dim rngA As Range
Dim cell As Range
Set rngA = Worksheets("Database").Range("D9:D177").End(xlUp)
For Each cell In rngA
If cell.Value = Range("A2").Value Then
cell.Select
Range("D" & ActiveCell.Row & ":AB" & ActiveCell.Row).Select
Selection.Delete
End If
Next cell
End Sub
上述工作,不会返回任何错误,但它没有做任何明显的事情。
我知道这很可能是残暴的,所以这就是我想要做的事情:
Database!D9:D177
包含D到AB列(4到28)中一组数据的标题。
有一个ActiveX搜索框可以实时填充单元Database!A2
与搜索到的内容(例如,在搜索框中键入“测试”,单元格数据库中出现“测试”!A2)。
当我运行宏时,我希望它检查Database!D9:D177
中找到的文本字符串的范围Database!A2
,然后删除该行的列D到AB的内容(例如,A2 =“测试“,在单元格D21中找到”测试“,删除D21:AB21)。
该行是一个动态值,这是我主要使用它的原因,但列是固定的。
此外,宏的按钮位于单独的工作表(Front Page!)上,但脚本将仅在数据库上运行!页。
只需要在excel工作,而不是在办公室工作。
我能想到的另一件事是相关的是,细胞可以在删除后留空,不需要填充,工作表永远不需要打印,因此边距不是问题。 / p>
或者我想在脚本开头添加一个“你确定吗?'是''不'Msgbox,但我可以稍后再玩,因为我知道我正在推动我的运气。
非常感谢任何帮助!
答案 0 :(得分:1)
我总是发现使用FIND
更快,而不是检查每个单元格的值
如果您想在重复的情况下查找所有值,可以继续使用.FINDNEXT(rFound)
- https://msdn.microsoft.com/en-us/library/office/ff839746.aspx
Public Sub Build_Delete()
Dim rngA As Range
Dim rFound As Range
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Database")
Set rngA = wrkSht.Range("D9:D177")
With rngA
Set rFound = .Find(wrkSht.Range("A2"), LookIn:=xlValues, LookAt:=xlWhole)
If Not rFound Is Nothing Then
If MsgBox(rFound.Value & " found on row " & rFound.Row & "." & vbCr & _
"Delete?", vbInformation + vbYesNo) = vbYes Then
rFound.EntireRow.Delete Shift:=xlUp
End If
End If
End With
End Sub