在 UDF 中设置时,在需要 range.cell 的范围内选择一个单元格

Posted

技术标签:

【中文标题】在 UDF 中设置时,在需要 range.cell 的范围内选择一个单元格【英文标题】:Pick one cell in range need range.cell when set inside a UDF 【发布时间】:2015-12-19 03:35:15 【问题描述】:

我创建了一个运行良好的 UDF。但是,如果未提交第二个范围(它是可选的),它将被设置为 UDF 内的范围。 如果我现在尝试直接返回一个单元格的范围,我需要将.Cells 添加到范围以选择具有(x, y) 的单元格。

如果没有提交范围,它会执行以下操作:

Set optional_range = required_range.Columns(2)
Set required_range = required_range.Columns(1)

如果我稍后在 UDF 中想要从 optional_range 输出一个单元格,我会得到这种行为:

Set MyFunction = optional_range(x, y)       'cell shows #VALUE
Set MyFunction = optional_range.Cells(x, y) 'shows correct value

但如前所述:如果optional_range 直接从公式中获取范围,则它也显示正确的值,而无需使用.Cells

我根本找不到这种行为的原因。谁能告诉我为什么会这样? 完整代码可以在here找到。

【问题讨论】:

这是因为您将 optional_range 设置为 .Columns,而不是像传入一个范围那样的范围。您可以使用 Set optional_range = required_range.Columns(2).Cells 绕过第二个。 所以我又学到了一些新东西......非常感谢:) 【参考方案1】:

您的错误是由于将 optional_range 设置为 Range.Columns 属性,然后尝试将其拼凑成单独的 Range.Cells 对象。 Range.Columns 和Range.Rows 属性属性与Range object 共享许多方法,但这不是其中之一。

解决方案是简单地将 optional_range 设置为 .Columns(2) 的 .Cells。

Set optional_range = required_range.Columns(2).Cells
'optional truncation to the worksheet's .UsedRange
Set optional_range = Intersect(required_range.Parent.UsedRange, required_range.Columns(2))

我添加了一种将 .Columns(2) 截断为Worksheet.UsedRange property 的方法。将其视为具有完整列引用的 SUMIF 与 SUMPRODUCT;如果您计划遍历 optional_range 中的单元格,则特别有用。无需添加 .Cells ; Intersect method 将交叉点中的单元格返回为真正的Range object。

【讨论】:

以上是关于在 UDF 中设置时,在需要 range.cell 的范围内选择一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 SurfaceView 中设置时拉伸相机预览

在 UINavigationController 中设置时图像不显示

在 ViewModel 中设置时 ListView SelectedItem 未突出显示

在情节提要中设置时,UISearchBar 不显示范围栏

在通知回调中设置时,标签不会出现在标签栏项目上

在 linux 机器中设置时的 Sonarqube-4.0 问题 (linux-x86-32)