【问题标题】:Arrays - how to exclude columns from databodyrange (or retain formulas)数组 - 如何从 databodyrange 中排除列(或保留公式)
【发布时间】:2015-06-26 02:47:13
【问题描述】:

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

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

是否有聪明人知道在为数组引用表的 databodyrange 时如何排除某些列?喜欢:

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

只是以上在语法中不起作用:(,或其他一些建议的最佳实践,即对代码中的两列进行公式化?

【问题讨论】:

    标签: arrays excel vba


    【解决方案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 列,因此您的代码应该可以工作,但请确保不要用数组中的值替换公式

    【讨论】:

    • 就像一个魅力!我已经尝试过了,我认为 .formula 与 .value 相同,但也有公式?第二个问题是我能否使用 .formula 更改数组中的公式?
    • 天哪,我刚刚意识到 .formula 必须在整个列中保持不变,现在这会很有趣
    • 我想知道如果我可以从我的数组中排除所有列保存列 1 和 2 是否会更容易
    • 1. “.formula 与 .value 相同,但也有公式” - 这是正确的 2. “我可以使用 .formula 更改数组中的公式吗?” - 不,但您可以像更改值一样更改数组中的公式:vArr(lCount, 4) = "=Sum(A1 + B1)" 3 如果您使用多个数组并排除所有公式列,可能会更容易
    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2013-03-08
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多