【发布时间】:2015-08-24 17:35:39
【问题描述】:
我有这个代码可以删除整列的单元格。最初我认为它会很好用,后来我意识到如果我这样做,同一列上的有用数据也会被删除。因此,我需要一个代码,它允许我在自己方便的时候删除任何范围的单元格,无论是行还是列
Sub TestDatabase()
Dim rng As range, rngError As range, delRange As range
Dim i As Long, j As Long, k As Long
Dim wks As Worksheet
On Error Resume Next
Set rng = Application.InputBox("Select cells To be deleted", Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub Else rng.delete
For k = 1 To ThisWorkbook.Worksheets.Count 'runs through all worksheets
Set wks = ThisWorkbook.Worksheets(k)
With wks
For i = 1 To 7 '<~~ Loop trough columns A to G
'~~> Check if that column has any errors
On Error Resume Next
Set rngError = .Columns(i).SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0
If Not rngError Is Nothing Then
For j = 1 To 100 '<~~ Loop Through rows 1 to 100
If .Cells(j, i).Text = "#REF!" Then
'~~> Store The range to be deleted
If delRange Is Nothing Then
Set delRange = .Columns(i)
Exit For
Else
Set delRange = Union(delRange, .Columns(i))
End If
End If
Next j
End If
Next i
End With
Next k
'~~> Delete the range in one go
If Not delRange Is Nothing Then delRange.delete
End Sub
【问题讨论】:
-
看起来您的代码删除了给定单元格范围内的值(在单个工作表上),然后检查工作簿中的所有工作表(包括已删除范围的工作表)是否有任何
#REF!错误。如果发现任何错误,也会删除错误单元格中的值/公式。这是正确的和你的意图吗? -
是的,除了您提到的部分,它将检查工作簿中的所有参考错误。它实际上循环遍历工作表以同时删除范围和参考错误,而不是一张单张。 @PeterT
-
您要求能够“在我方便的时候删除任何范围的单元格,无论是行还是列”。您上面的 VBA 代码是否满足您的需求?如果不是,为什么不呢?老实说,我没有看到您声明的目标与您发布的代码之间的联系。
-
它不允许我只删除行列。那是我的问题。我希望它能够删除任何行或列,而不仅仅是仅列或仅行@PeterT
-
好的,您可以为您的输入和输出示例发布任何图片。所以,我们可以多想。