2017-03-08 77 views
0

我有這3段代碼,它的工作方式不同,但提供類似的結果。其目的是,我在一個單獨的列僅由填充單元的值,並且沒有空格VBA代碼的工作方式不同

  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 
    

然而,代碼的最後一塊不起作用。它應該只複製和粘貼填充的單元格而不是emty一次(包含「」)。現在它複製並粘貼一切。我怎樣才能使它工作?其結果是:

K    A 
Paris   Paris 


Amsterdam  Amsterdam 

我需要它是

A 
Paris 
Amsterdam 
+6

你觀察他們的工作方式不同是正確的。但你的問題是什麼? – GSerg

+2

那麼??什麼是問題? – R3uK

+1

現在有更多的觀察,但仍然沒有問題。你想問如何讓第三件作品?如果是這樣,請描述它應該做什麼以及它做什麼。 – GSerg

回答

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 
+0

只是評論:這並不代替問題的第3個。這複製**任何**非空單元格(包括數值)而不是公式的文本值! –

+0

好抓@Peh。我更新了答案。 –

+1

仍然不一樣。如果公式返回一個字符串轉換爲數字(例如'= 「42」'),'SpecialCells(xlCellTypeFormulas,xlTextValues)'將正常看到它,但'則IsNumeric()'上這將是TRUE;。你可能想'和vartype(vData(i,1))= vbstring'。 – GSerg

相關問題