数组 - 如何从databodyrange中排除列(或保留公式)

时间:2015-06-26 02:47:13

标签: arrays excel-vba vba excel

我最近在尝试使用数组和表格,并在我通过此代码将整个数组转移回表格时发现:

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列上的有效公式已经消失了:(。我将在此之前说明它的样子:

enter image description here

在引用表格的数据阵列时,有没有明亮的灵魂知道如何排除某些列?像:

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

上述内容在语法中不起作用:(或其他一些建议的最佳实践,即在代码中为两列做公式?

1 个答案:

答案 0 :(得分: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列,因此您的代码应该可以工作,但请确保不要使用数组中的值替换公式