c修改datatable单元格的值_VBA实用小程序63: 查找并返回与指定属性匹配的所有单元格...

学习Excel技术,关注微信公众号:

excelperfect

本文介绍的VBA程序是一个自定义函数,整理自jkp-ads.com,很好地增强了内置的CallByName函数的适用性。

该函数接受单元格对象、代表该对象属性的字符串和属性值作为参数,返回满足属性值的所有单元格。程序代码如下:

Function FindCells(ByRefoRange As Range, ByVal sProperties As String, _        ByVal vValue As Variant) As Range    Dim oResultRange As Range    Dim oArea As Range    Dim oCell As Range    Dim bDoneOne As Boolean    Dim oTemp As Object    Dim lCount As Long    Dim lProps As Long    Dim vProps As Variant    vProps = Split(sProperties, ".")    lProps = UBound(vProps)    For Each oArea In oRange.Areas        For Each oCell In oArea.Cells            Set oTemp = oCell            For lCount = 0 To lProps - 1                Set oTemp = CallByName(oTemp,vProps(lCount), VbGet)            Next            If CallByName(oTemp,vProps(lProps), VbGet) = vValue Then                If bDoneOne Then                    Set oResultRange =Union(oResultRange, oCell)                Else                    Set oResultRange = oCell                    bDoneOne = True                End If            End If        Next    Next    If Not oResultRange Is Nothing Then        Set FindCells = oResultRange    End IfEnd Function

假设有如下图1所示的工作表,其中有黄色和红色背景色的单元格。

3fe815ef4735f44868a3ce99daa7ed7f.png

图1

下面使用FindCells函数查找并选择所有红色背景色的单元格,代码如下:

Sub UseFindCellsExample()    FindCells(ActiveSheet.UsedRange,"Interior.ColorIndex", 3).SelectEnd Sub

代码中,传递的单元格对象为当前工作表中已使用的区域、属性为单元格背景色、属性值为3(即红色)。运行代码后的结果如下图2所示。

bd593467ad174a52fb4dcd29025516af.png

图2

在代码中,我们使用了CallByName函数来增强其适应性。CallByName函数的语法为:

CallByName(object, procname,calltype, [args()])

其中:

1.参数object,必需,Variant型(Object),在函数中执行的对象的名称。

2.参数procname,必需,Variant型(String),代表对象的属性或方法名的字符串。

3.参数calltype,必需,一个vbCallType型的常量,代表被调用的过程的类型,可以是vbGet(返回属性)、vbLet(修改属性)、vbMethod(执行方法)、vbSet(设置对象)。

4.参数args(),可选,Variant型(数组)。

例如,如果想获取上图1所示的工作表单元格A2的背景色的值,可以使用下面的代码:

Sub test()    MsgBox CallByName(ActiveCell.Interior,"Colorindex", VbGet)End Sub

返回值6,是代表黄色的颜色值。

然而,如果想要在CallByName函数中使用下面更通用一些的代码:

Sub test()MsgBox CallByName(ActiveCell, "Interior.Colorindex", VbGet)EndSub

会返回错误,因为参数procname仅接受单个的条目,这就需要使用我们在前面的自定义函数FindCells,将其拆分成单个的元素。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。

a26f83a2bcbe8f4db253bde0aaf8d3ff.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值