如何使sub在找到空白单元格时停止?

时间:2013-03-22 20:12:40

标签: excel vba excel-vba excel-2010

我正在使用Excell 2010中的数据库,发现了许多重复的名称。我试图制作一个VBA脚本来解决这个问题,但它只是在一个无限循环上结束。我希望它在碰到空白单元格时停止。下面是我提出的代码

Sub excluirDuplicatas()

   Dim lngCont As Long
   Dim lngLinhas As Long
   Dim rngNom1 As Range
   Dim rngNom2 As Range

lngCont = 0
lngLinhas = Cells.SpecialCells(xlCellTypeLastCell).Row

While lngCont <= lngLinhas

Set rngNom1 = ActiveCell
Set rngNom2 = rngNom1.Offset(1, 0)

While rngNom1.Value = rngNom2.Value And rngNom2 <> lastRow


rngNom2.Select
rngNom2.EntireRow.Delete
Set rngNom2 = ActiveCell
Wend


Set rngNom1 = rngNom2
Set rngNom1 = ActiveCell



Set rngNom1 = rngNom2
rngNom1.Select

lngCont = lngCont + 1

Wend

End Sub

我不知道什么是错的,我的猜测是我陈述的部分

rngNom2 <> Cells.SpecialCells(xlCellTypeLastCell).Row

请注意,我今天(3月22日)主持了VBA节目。如果你能不仅请发布答案,还要快速解释,我将不胜感激。

PS:数据表长度超过2000行

3 个答案:

答案 0 :(得分:2)

我建议您使用For循环,这样就可以避免使用.Select您可能希望看到THIS LINK

例如,您的代码看起来像这样

For i = 1 To lastRow
    If Len(Trim(Sheets("Sheet1").Range("A" & i).Value)) = 0 Then Exit For

    '
    '~~> Rest of your code
    '
Next i

答案 1 :(得分:0)

我认为这个命令可以帮到你。将Range("a1")替换为您要测试的范围。

IsEmpty(Range("a1"))

do while isempty(range("a1")) ...或do while not isempty(range("a1"))

答案 2 :(得分:0)

嗯,我不是100%肯定你在做什么,但这将是一个开始。

首先声明一个范围变量rng taht包含您要检查的所有单元格。我设置此rng变量的方式会自动停在列中的第一个空白单元格。

我们将使用计数器r迭代这些单元格,从最后一个到第一个单元格(删除时这是必要的)。

在此迭代过程中,我们将使用变量cl作为单个单元格区域。

Sub excluirDuplicatas()

Dim rng as Range
Dim r as Integer 'row counter.
Dim cl As Range


lngCont = 0
lngLinhas = Cells.SpecialCells(xlCellTypeLastCell).Row

set rng = Range(ActiveCell.Address, Range(ActiveCell.Address).End(xlDown)) 

For r = rng.Rows.Count to 1 Step - 1 'Step backwards when deleting, otherwise you have infinite loop

    'This tests to see if the cell value is the same as the value below it.
     ' and deletes it if it is the same value.
    If cl.Value = cl.Offset(1,0).Value Then
        cl.EntireRow.Delete

    End If
Next

End Sub