需要帮助精炼我的Excelmacros删除空行或执行其他操作

基本上我试图完成的是search文档的空白行,并删除它们,如果有的话。 如果有空行要删除,这很好用。 但是,如果没有空行,则macros以错误结束。 我会永远感激,如果有人可以告诉我如何使这成为“如果空白行然后这个,如果没有那么”

Sheets ("xml") .Select Cells.Select Selection.SpecialCells(x1CellTypeBlanks).Select Selection.EntireRow.Delete 

input我的第二个macros(这部分工作正常)

问候

让我指出你的规范:

如何避免在Excel VBAmacros中使用select/激活

所以你可以开始理解为什么你当前的代码失败或执行不合需要的操作。 当您的select中没有空白单元格会发生什么? 你会得到一个错误。 为什么?

因为在这种情况下, Selection.SpecialCells(xlCellTypeBlanks)计算结果为Nothing 。 (你可以使用一些debugging语句来validation)因为Nothing任何属性或方法没有,你会得到一个错误,因为你真的说:

Nothing.Select

这是一个空程序,不grok,不计算等。

所以,你需要用这样的东西来testing虚无:

 Sheets("xml").Select Cells.Select If Not Selection.SpecialCells(x1CellTypeBlanks) Is Nothing Then Selection.SpecialCells(x1CellTypeBlanks).EntireRow.Delete End If 

我仍然build议避免Select不惜一切代价(99%的时间是多余的,并且使得代码很潦草,难以debugging和维护)。

所以你可以按照这样的思路做更完整的事情:

 Dim blankCells as Range '## Use a range variable. '## Assign to your variable: Set blankCells = Sheets("xml").Cells.SpecialCells(xlCellTypeBlanks) '## check for nothingness, delete if needed: If Not blankCells Is Nothing then blankCells.EntireRow.Delete 

后续从评论

所以在VBA中,我们可以声明表示对象或数据/值的variables,就像等式中的mathvariables一样。

Range是Excel对象模型的对象部分types,它由工作簿/工作表/单元格/范围/等组成。 (远远超过我希望在这里传达给你的)

http://msdn.microsoft.com/en-us/library/office/ff846392(v=office.14).aspx

如果您向下滚动到“为什么使用variables”部分,可以在这里使用variables的一个很好的例子。

http://www.ozgrid.com/VBA/variables.htm

这当然是非常简单的…但读者的摘要版本是variables允许我们反复引用相同的对象(或者sipmle数据types的值),而不必每次都明确地引用它。

当我们使用variables而不是绝对引用时,代码更容易阅读,维护和debugging,这是非常方便的副作用:

 Dim rng as Range Set rng = Sheets(1).Range("A1:Q543").Resize(Application.WorksheetFunction.CountA(Sheets(1).Range("A:A"),)) 

想象一下,相当(但不是可笑的)复杂的范围构造。 如果您需要在代码中多次引用该范围,那么将其分配给一个variables将是愚蠢的,如果没有其他理由而不是通过键入来保存自己的理智(并且可能会忘记其中的一部分)。 这也很容易维护,因为您只需修改一个赋值语句,所有随后的引用就会反映这个变化。