前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel实战技巧98:使用VBA在工作表中添加ActiveX控件

Excel实战技巧98:使用VBA在工作表中添加ActiveX控件

作者头像
fanjy
发布2021-03-12 16:56:14
5K0
发布2021-03-12 16:56:14
举报
文章被收录于专栏:完美Excel完美Excel

excelperfect

一些情形下,我们需要在工作表中使用ActiveX控件,这通常使用VBA来实现。

要使用VBA从控件工具箱(ActiveX控件)中添加控件,可以使用OLEObjects集合的Add方法。该方法包含有大量的参数,包括ClassType、Top、Left、Width和Height等参数。

其中,参数ClassType代表的一些常见的ActiveX控件的名称如下:

Forms.Checkbox.1(复选框)

Forms.Combobox.1(组合框)

Forms.Optionbutton.1(选项按钮)

Forms.Textbox.1(文本框)

Forms.Listbox.1(列表框)

Forms.Commandbutton.1(命令按钮)

下面通过一个例子,提供在工作表中添加ActiveX控件的思路。

如下图1所示,要求在每项工作前面都添加复选框,并且当用户选中复选框后,自动隐藏该复选框所在的行。

图1

下面的代码用来在工作表中添加复选框:

代码语言:javascript
复制
Sub RefreshList()
    Dim oCheck As OLEObject
    Dim rCell As Range, rRange As Range
    Dim lLastRow As Long
   
   
    '清除已经存在于工作表中的复选框
    For Each oCheck In Sheet1.OLEObjects
        oCheck.Delete
    Next oCheck
   
    lLastRow = Sheet1.Range("B" &Cells.Rows.Count).End(xlUp).Row
    Set rRange = Sheet1.Range("B2:B"& lLastRow)
   
    For Each rCell In rRange
        rCell.RowHeight = 14
        WithSheet1.OLEObjects.Add(ClassType:="Forms.Checkbox.1", _
                   Top:=rCell.Top,Left:=rCell.Offset(0, -1).Left, _
                   Height:=rCell.Height,Width:=rCell.Offset(0, -1).Width)
                     
           .Object.Caption = ""
            .LinkedCell = rCell.Offset(0,-1).Address
            .Object.Value = False
        End With
     Next rCell
    
End Sub

上述代码首先删除工作表中所有已存在的复选框,因为本示例已知道工作表中无其他控件,所以直接删除,如果无法判断是否有其他控件而只需删除复选框,可以加上一个条件判断语句:

代码语言:javascript
复制
If TypeName(oCheck.Object)=”CheckBox” Then

这样,仅删除复选框。

接下来,在确定数据范围后,在第一列添加复选框并设置了一些属性值以方便以后操作。这里,有一些通用的适合于其他控件的属性,也有一些专属于复选框的属性。

下面的代码用于隐藏复选框选中后的行:

代码语言:javascript
复制
Sub HideRows()
    Dim rCell As Range, rRange As Range
    Dim lLastRow As Long
   
    lLastRow = Sheet1.Range("B" &Cells.Rows.Count).End(xlUp).Row
    Set rRange = Sheet1.Range("B2:B"& lLastRow)
   
    For Each rCell In rRange
        If rCell.Offset(0, -1).Value Then
            rCell.EntireRow.Hidden = True
        End If
    Next rCell
   
End Sub

上述代码遍历设定区域的每行并隐藏已复选的行,如下图2所示。

图2

注意,你需要将上述代码关联到相应的控件或命令按钮以执行代码。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档