加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用VBA在工作表中添加ActiveX控件

(2017-03-19 16:41:38)
分类: ◆VBA

使用VBA在工作表中添加ActiveX控件
━━━━━━━━━━━━━━━━━━━━━━━━━

  
要使用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.Commanon.1(命令按钮)
  
下面举一个例子,提供一些思路,并供探讨。
如下图所示,要求在每项工作前面都添加复选框,并且当用户选中复选框后,自动隐藏该复选框所在的行。
  
下面的代码用来添加复选框:

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("BCells.Rows.Count).End(xlUp).Row 
    Set rRange Sheet1.Range("B2:BlLastRow
      
    
For Each rCell In rRange 
        rCell.RowHeight 14  
        With Sheet1.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  

上述代码首先删除工作表中所有已存在的复选框,因为本示例已知道工作表中无其他控件, 所以直接删除,如果无法判断是否有其他控件而只需删除复选框,可以加上一个条件判断语句:
  
If TypeName(oCheck.Object) = "CheckBoxThen 
这样,仅删除复选框。

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

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

Sub HideRows()  
    
Dim rCell As Range, rRange As Range 
    Dim lLastRow As Long 
      
    
lLastRow Sheet1.Range("BCells.Rows.Count).End(xlUp).Row 
    Set rRange Sheet1.Range("B2:BlLastRow
      
    
For Each rCell In rRange  
        If rCell.Offset(0, - 1).Value Then 
            
rCell.EntireRow.Hidden True 
        End If 
    Next 
rCell      
End Sub 
  
上述代码遍历设定区域的每行并隐藏已复选的行。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有