VBA代码的工作方式不同

时间:2017-03-08 13:41:54

标签: excel vba excel-vba

我有这3段代码,它们的工作方式不同但却提供了类似的结果。目的是我在一个单独的列中只有填充单元格中的值,而没有空格

  1. 此代码仅复制I10:I61中公式的结果。公式也返回“”,我不需要。

    With Worksheets("Calculator").Range("I10:I61")
        .Offset(, 0).SpecialCells(xlCellTypeFormulas, xlNumbers).Copy
        Worksheets("Graphs").Range("F2").PasteSpecial SkipBlanks:=True, Paste:=xlPasteValues
    End With
    
  2. 此代码复制值,其中没有公式

    With Worksheets("Calculator")
        Set VisRng = .Range("D10:D61").SpecialCells(xlCellTypeConstants)
        VisRng.Copy
        Worksheets("Graphs").Range("B2").PasteSpecial xlValues
    End With
    
  3. 这应该从公式中复制文本结果。这是行不通的。公式也返回“”,我不需要。

    With Worksheets("Calculator").Range("K10:K61")
        .Offset(, 0).SpecialCells(xlCellTypeFormulas, xlTextValues).Copy
        Worksheets("Graphs").Range("A2").PasteSpecial SkipBlanks:=True, Paste:=xlPasteValues
    End With
    
  4. 但是,最后一段代码不起作用。它应该只复制和粘贴填充的单元格而不是emty一次(包含“”)。现在它复制并粘贴一切。我怎样才能使它工作?结果是:

    K             A
    Paris         Paris
    
    
    Amsterdam      Amsterdam
    

    我需要它

    A
    Paris
    Amsterdam
    

1 个答案:

答案 0 :(得分:2)

由于excel将""的公式结果视为文本,请尝试使用此方法。

Dim vData as Variant
vData = Worksheets("Calculator").Range("K10:K61")

Dim i as Integer
For i = Lbound(vData) to uBound(vData)
   If len (vData(i,1)) And Not IsNumeric(vData(i,1)) Then 
     With Worksheets("Graphs")
         .Range("A" & .Rows.Count).End(xlUp).Offset(1).Value = vData(i,1)
     End With
   End If
Next