存档在 ‘窗体控件’ 分类中.
下面的内容及程序代码模仿自《Excel 2007 VBA Programmer’s Reference》,可能在某些情形下极其有用,因此特辑录于此,供参考。
如下图所示,双击工作表Sheet1的列A中的任一单元格,将出现一组合框,允许用户选择其中的项目。当用户选取某项目后,将自动输入到该单元格,并在该单元格右侧的单元格中输入相应的价格数字,组合框同时消失。

下面是程序代码。在工作表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
如下图所示:

Technorati 标签:
Excel,
窗体控件,
组合框,
选项按钮
本例使用了组合框和选项按钮来跟踪和调整物品的状态,如下图所示。当在组合框中选择相应的物品后,下面的方框上方的文字会相应改变为该组合框物品名称,方框中的选项按钮根据该物品是否充足进行相应的选择。同时,在组合框中选择物品后,如果更改方框中选项按钮的状态,则下方库存状态列表中的文字也相应更改。单元格区域B11:C18为物品及相应的库存状态列表。
例如,在组合框中选择物品“潜水泵”,单元格B5会显示“潜水泵 充足还是不充足?”,因为在B11:C18中的潜水泵库存状态为充足,所以方框中名为“充足”的选项按钮被选中。此时,若将选项按钮更改为名为“不足”的选项按钮,那么B11:C18中潜水泵所对应的库存状态也会更改为“不足”。
下面来看看这个示例是如何实现的。
第一步:在工作表中放置一个组合框、两个选项按钮,并调整格式如上图。在B11:C18区域录入数据,当然可以将数据录入到工作表的其他区域或其他工作表中,并且可以为区域命名,以方便调用和扩展。在本例中,为了演示方便,将数据区域与窗体控件放置在一起。
第二步:设置组合框,如下图所示。
第三步:设置选项按钮,将选项按钮的单元格链接为C8。
第四步:设置单元格B5,使之显示相关的提示信息。在单元格B5中输入公式:
=INDEX(B12:B18,D3) & ” 充足还是不充足?”
第五步:编写组合框和选项按钮相关联的代码。在VBE的标准模块中输入下面的代码:
1: Sub GetStates()
2: Dim ws As Worksheet
3: Dim iWPNumber As Integer
4: Dim sStates As String
5: On Error Resume Next
6: Set ws = ThisWorkbook.Worksheets(“组合框示例”)
7: iWPNumber = ws.Range(“D3″)
8: ‘获取组合框中当前所选物品的状态
9: sStates = ws.Range(“B11″).Offset(iWPNumber, 1)
10: If sStates = “充足” Then
11: ‘激活名为”充足”的选项按钮
12: ws.Range(“C8″).Value = 1
13: Else
14: ‘激活名为”不足”的选项按钮
15: ws.Range(“C8″).Value = 2
16: End If
17: Set ws = Nothing
18: End Sub
19:
20: Sub SetStates()
21: Dim ws As Worksheet
22: Dim iWPNumber As Integer
23: On Error Resume Next
24: Set ws = ThisWorkbook.Worksheets(“组合框示例”)
25: iWPNumber = ws.Range(“D3″)
26: If ws.Range(“C8″).Value = 1 Then
27: ‘更新物品的状态为充足
28: ws.Range(“B11″).Offset(iWPNumber, 1).Value = “充足”
29: Else
30: ‘更新物品的状态为不足
31: ws.Range(“B11″).Offset(iWPNumber, 1).Value = “不足”
32: End If
33: Set ws = Nothing
34: End Sub
其中,GetStates过程为组合框对应的宏代码,当组合框选项发生变化时更改对应的选项按钮。SetStates过程为选项按钮对应的宏代码,当组合框选项选定后,更改选项按钮设置时,相应更改库存列表中物品的库存状态。
第六步:为组合框指定宏为GetStates,为两个选项按钮指定宏为SetStates。
标签: 没有标签
窗体控件在Excel 5中引入,使用窗体控件也能够创建出丰富的用户体验。这篇文章和下篇文章将分别列举一个例子。
控制工作簿中工作表的显示和隐藏是复选框控件的一种典型应用。如下图所示,首先在工作表中放置一个分组框,然后在该分组框中放置三个复选框,将这四个控件的标题分别改为如图所示的文字。
接下来,设置这三个复选框分别链接至其背后的单元格B4、B5、B6,并设置它们的“颜色与线条”为“自动”,使其覆盖背后的单元格,这样该单元格中的文字就会被遮住。
注意,要想复选框后面的单元格文字不可见,以避免与复选框文本相冲突,须设置该复选框的“颜色与线条”格式为“自动”。
设置控件格式的方法为,在某控件中单击右键,选择“设置控件格式”。在“设置控件格式”对话框(如下图所示)中,选择相应的选项卡,对该控件的格式进行设置。
在VBE中编写的代码如下:
1: Sub SetWorksheetVisibility()
2: Dim ws As Worksheet
3: On Error Resume Next
4: Set ws = ThisWorkbook.Worksheets(“控制工作表可视状态”)
5: Application.ScreenUpdating = False
6: ThisWorkbook.Worksheets(“Sheet1″).Visible = ws.Range(“B4″).Value
7: ThisWorkbook.Worksheets(“Sheet2″).Visible = ws.Range(“B5″).Value
8: ThisWorkbook.Worksheets(“Sheet3″).Visible = ws.Range(“B6″).Value
9: Application.ScreenUpdating = True
10: End Sub
最后,分别在这三个复选框中单击右键,选择“指定宏”,在“指定宏”对话框分别将宏均指定为SetWorksheetVisibility。
这样,当在工作表中选中某复选框时,该复选框标题所对应的工作表可见,当取消复选框选择时,相应的工作表将隐藏。
标签: 没有标签