2015-06-26 39 views
1

我已經與陣列和表最近的實驗,發現當我從這個代碼傳送的整個陣列回表:陣列 - 如何從databodyrange排除列(或保留公式)

Dim vArr As Variant 
Dim SPArr As Variant 
Dim lCount As Long 

vArr =ThisWorkbook.Worksheets("catalogue").ListObjects(1).DataBodyRange.Value2 

For lCount = LBound(vArr) To UBound(vArr) 
    Select Case vArr(lCount, 1) 
    Case "G-6R-15L2" 'These are model names 
     vArr(lCount, 4) = 4.8 
    Case "G-6SPF-ZB2" 
     vArr(lCount, 4) = 4.5 
    Case "U6-6S-15L2" 
     vArr(lCount, 4) = 6 
    Case "U-6S-30H2" 
     vArr(lCount, 4) = 9 
    Case "G-6SP-12L2" 
     vArr(lCount, 4) = 4.5 
    End Select 
Next lCount 
ThisWorkbook.Worksheets("catalogue").ListObjects(1).DataBodyRange.Value2 = vArr 

主動式我對第3欄都消失了:(.I'll說明什麼,它看起來像以前一樣在這裏:

enter image description here

是否有光明的靈魂知道如何引用表的databodyrange時排除某些列對於數組?像:

vArr(1) =ThisWorkbook.Worksheets("catalogue").ListObjects(1).listcolumns(1).DataBodyRange.Value2 
vArr(2)=ThisWorkbook.Worksheets("catalogue").ListObjects(1).listcolumns(2).DataBodyRange.Value2 

只是,上面並沒有在語法工作:(,或者一些其他建議的最佳做法,即做在代碼中兩列的制定?

回答

1

你必須要替換 「.Value2」 與 「.Formula

與此類似:

Option Explicit 

Sub testFormulas() 
    Dim v As Variant 

    With Sheet1.ListObjects(1).DataBodyRange 
     v = .Formula 
     .Clear 
     .Formula = v 
    End With 
End Sub 

數組將現在包含公式,你只更新第4列,以便您的代碼可以正常工作,但要確保您不會用數組中的值替換公式

+0

的作品就像一個魅力!我試過了,我會認爲.formula和.value是一樣的,但是還有公式?第二個問題是,我可以使用.formula更改數組中的公式嗎? – lackdaz

+0

哦,親愛的我剛剛意識到.formula必須在整個列中保持不變,現在這將是有趣的 – lackdaz

+0

我想知道如果我可以排除列中的所有列保存列1和2,我是否會更輕鬆1和2 – lackdaz