在工作表中动态添加窗体控件

下面的内容及程序代码模仿自《Excel 2007 VBA Programmer’s Reference》,可能在某些情形下极其有用,因此特辑录于此,供参考。
如下图所示,双击工作表Sheet1的列A中的任一单元格,将出现一组合框,允许用户选择其中的项目。当用户选取某项目后,将自动输入到该单元格,并在该单元格右侧的单元格中输入相应的价格数字,组合框同时消失。
addcomboxdynamic1
下面是程序代码。在工作表Sheet1的代码模块中输入BeforeDoubleClick事件代码:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Not Intersect(Target, Columns(”A”)) Is Nothing Then
         Call AddDropDown(Target)
         Cancel = True
    End If
End Sub

在任一模块中,输入下面的代码:
Sub AddDropDown(Target As Range)
    Dim ddBox As DropDown
    Dim vProducts As Variant
    Dim i As Integer
    ‘创建产品数组
    vProducts = Array(”香蕉”, “苹果”, “菠萝”, “葡萄”)
    ‘在目标单元格中添加下拉控件
    With Target
        Set ddBox = Sheet1.DropDowns.Add(.Left, .Top, .Width, .Height)
    End With
    ‘定义执行的宏并填充列表
    With ddBox
        .OnAction = “EnterProdInfo”
        For i = LBound(vProducts) To UBound(vProducts)
            .AddItem vProducts(i)
        Next i
    End With
End Sub

Private Sub EnterProdInfo()
    Dim vPrices As Variant
    ‘创建价格数组
    vPrices = Array(6, 8, 5, 4)
    ‘输入所选项到相应的单元格
    With Sheet1.DropDowns(Application.Caller)
        .TopLeftCell.Value = .List(.ListIndex)
        .TopLeftCell.Offset(0, 1).Value = vPrices(.ListIndex + LBound(vPrices) - 1)
        ‘删除
        .Delete
    End With
End Sub

如下图所示:
addcomboxdynamic2


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

发表评论