我正在尝试为ActiveX控件按钮编写一小段代码。我在VBA上不是最好的,并且只能在空闲时间这样做,所以请您留心一点...我有一个“主库存”电子表格。列“ B”到“ N”包含有关库存的数据。发货后,在“ N”列中用“ Y”表示(代表“是”)。
我在#2上取得了成功,但在#1或#3上却没有。我正在删除所有行,但似乎无法正确显示“ If”语句以仅识别那些“ Y”值。
非常感谢您的帮助。
Private Sub CommandButton1_Click()
On Error Resume Next
For I = 3 To 498
If Range(I, "N").Text = "Y" Then
Range("B3:N27").SpecialCells(xlCellTypeConstants).ClearContents
End If
Next I
End Sub
答案 0 :(得分:0)
删除行时,您需要从底部开始并向上进行操作,以使其余行号保持不变。列“ N”为14,因此您可以使用这样的逻辑。
Sub DeleteRows()
Dim I As Long
For I = 498 To 3 Step -1
If Cells(I, 14).Value = "Y" Then
Rows(I).EntireRow.Delete
End If
Next I
End Sub
答案 1 :(得分:0)
一种更快的方法是创建一个范围对象,以保存标记为删除的所有行,然后在最后一次全部删除。在Excel中,在循环中一一删除行可能会非常缓慢,特别是随着行数的增加而增加。
尝试一下:
Public Sub DeleteRowsWithRange()
Dim rngLoop As Range
Dim rngMyRange As Range
For Each rngLoop In Columns("N").Cells
If rngLoop.Value = "" Then ' This is your exist clause. You can change this depending on your worksheet structure.
Exit For
ElseIf rngLoop.Value = "N" Then
If rngMyRange Is Nothing Then
Set rngMyRange = rngLoop.EntireRow
Else
Set rngMyRange = Union(rngMyRange, rngLoop.EntireRow)
End If
End If
Next rngLoop
rngMyRange.Delete xlShiftUp
Set rngLoop = Nothing
Set rngMyRange = Nothing
End Sub