VBA:从处理中跳过空白单元(使用其中的公式)

我有一个vba代码多次复制一个文件,并重命名从列表“Linkuire”列D中的名称列表后的输出。
D列充满了将数据导入到D1000的连接公式。
当连接公式返回“”(如在没有)我希望代码忽略该单元格。

' the range of cells that contain the rename list With ActiveWorkbook.Sheets("Linkuire") Set rRenameList = .Range("D2", .Cells(.Rows.Count, "D").End(xlUp)) End With 

现在只要考虑到所有D2到D1000单元即使有一些是“”

我怎样才能让代码忽略连接的返回是“”的所有单元格? (我有同样的问题,将一个表格转换成pdf格式的数据 – 数据从连接的公式转换而来,即使连接返回“

谢谢..

这应该工作。 它将循环遍历你的范围,并且当长度大于或等于1时,只添加单元地址到你的rRenameList

 Sub Test() ' Adapted from http://stackoverflow.com/a/8320884/4650297 Dim rng1 As Range, rRenameList As Range, cel As Range With ActiveWorkbook.Sheets("Linkuire") Set rng1 = .Range("D2", .Cells(.Rows.Count, "D").End(xlUp)) End With For Each cel In rng1 If Len(cel) >= 1 Then If Not rRenameList Is Nothing Then Set rRenameList = Union(rRenameList, cel) Else ' the first valid cell becomes rng2 Set rRenameList = cel End If End If Next cel Debug.Print rRenameList.Address End Sub 

因为纯粹的 SpecialCells()方法不能工作

您可以使用以下两种方法避免循环:

  • AutoFilter()SpecialCells()方法:

     With ActiveWorkbook.Sheets("Linkuire") With .Range("D1", .Cells(.Rows.count, "D").End(xlUp)) .AutoFilter Field:=1, Criteria1:="<>" '<--| filter out blanks If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then Set rRenameList = .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible) End With .AutoFilterMode = False End With 

  • 公式和SpecialCells()方法

     With ActiveWorkbook.Sheets("Linkuire") With .Range("D2", .Cells(.Rows.count, "D").End(xlUp)) .Offset(, 1).FormulaR1C1 = "=IF(RC[-1]="""", 1,"""")" Set rRenameList = .Offset(, 1).SpecialCells(xlCellTypeFormulas, xlNumbers).Offset(, -1) .Offset(, 1).ClearContents End With End With 

    在这种方法中,你正在写一个“助手”列中的公式,我select了与右边相邻。 它可以调整到任何其他偏移量