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

Posted

技术标签:

【中文标题】数组 - 如何从 databodyrange 中排除列(或保留公式)【英文标题】:Arrays - how to exclude columns from databodyrange (or retain formulas) 【发布时间】: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

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

【问题讨论】:

【参考方案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 如果您使用多个数组并排除所有公式列,可能会更容易

以上是关于数组 - 如何从 databodyrange 中排除列(或保留公式)的主要内容,如果未能解决你的问题,请参考以下文章

从 Google BigQuery 中的选择中排除数组类型字段

如何从单元测试中排除名称中带有“Test”的帮助项目?

如何从VS2012单元测试中的代码覆盖率分析中排除名称以“.Test”结尾的项目

从 jacoco 报告中排除数据绑定包

sh 从提交中排除权限更改的文件

从 UIWebView 委托方法中排除外部 javascript 内容