【发布时间】:2017-01-04 21:53:16
【问题描述】:
我正在编写一个 Excel VBA 脚本来清理电子表格(首先我删除带有空格的行,然后我找到/替换一些文本以进行更多总结)。
我想删除受访者未回答任何调查问题的行。行确实在前几列(A、B、C)中包含一些数据,例如他们的 IP 地址等。调查答案位于 Q3 列直到 AC 列($Q4 到 $ AC)这里是截图:
但如果用户没有回答任何调查问题,我想删除该行。
我的 VBA 脚本在这里:
Sub Main()
ReplaceBlanks
Multi_FindReplace
End Sub
Sub ReplaceBlanks()
On Error Resume Next
Worksheet.Columns("$Q:$AC").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
End Sub
Sub Multi_FindReplace() 'PURPOSE: Find & Replace a list of text/values throughout entire workbook 'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim sht As Worksheet Dim fndList As Variant
Dim rplcList As Variant Dim x As Long
fndList = Array("Mostly satisfied", "Completely satisfied", "Not at all satisfied")
rplcList = Array("satisfied", "satisfied", "unsatisfied")
'Loop through each item in Array lists
For x = LBound(fndList) To UBound(fndList)
'Loop through each worksheet in ActiveWorkbook
For Each sht In ActiveWorkbook.Worksheets
sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next sht
Next x
End Sub
当我在 ReplaceBlanks 子例程中没有错误处理的情况下运行此程序时,我会收到以下错误消息:
运行时错误“424”:需要对象
到目前为止,只有第二个子程序有效(即 Multi_FindReplace )。如何修复第一个子例程,以便删除没有响应者答案的行?
【问题讨论】:
-
为什么都是一行?
On Error Resume Next Worksheet.Columns("$Q:$AC").SpecialCells(xlCellTypeBlanks).EntireRow.Delete On Error GoTo 0?那应该是三行。On Error Resume Next//Worksheet.Columns("$Q:$AC").SpecialCells(xlCellTypeBlanks).EntireRow.Delete//On Error GoTo 0...另外,取出On Errors,看看你得到了什么错误,这可能会阻碍删除。 -
@BruceWayne - 谢谢,解决了这个问题。好的,我会试试的
-
@BruceWayne - 当我把这些线拿出来时,我明白了 -
Run-time error '424': Object required.. 不知道 424 是什么意思。 -
Worksheet.Columns(是哪里出错了?你是说ActiveSheet?