控件 (Controls) 也可以在表单之外使用。在下面的示例中,我们将直接在工作表上使用控件。
请注意,必须激活“设计器模式”(“Design mode”)才能修改工作表上的特定控件(并且还必须停用才能使用此控件)。
在看下一个示例之前,让我们先看一下:
现在,我们要为单元格添加背景颜色,并根据滑块在 30 行 x 10 列的定义区域中的位置来选择它们。
滚动屏幕的垂直滑块的属性如下:
水平滑块是相同的,除了 Max : 10。
以下是每当垂直滑块 (Value) 的值发生变化时就会运行的代码:
'细胞中的灰色背景 Cells.Interior.Color = RGB(240, 240, 240) '我们应用颜色并选择一个单元格 With Cells(ScrollBar_vertical.Value, ActiveCell.Column) '使用 Value (Value) 定义单元格 .Interior.Color = RGB(255, 220, 100) '我们使用橙色 .Select '我们选择一个单元格 End With
此代码在 Change 和 Scroll 事件发生时被触发,并执行指令,无论我们单击滑块的哪一部分。
以下是垂直滑块的代码:
Private Sub vertical_bar() '为单元格应用灰色背景 Cells.Interior.Color = RGB(240, 240, 240) '应用背景并选择单元格 With Cells(ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB(255, 220, 100) '橙子 .Select '我们选择一个单元格 End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
接下来是水平滑块的代码:
Private Sub horizontal_bar() '为单元格应用灰色背景 Cells.Interior.Color = RGB(240, 240, 240) '应用背景并选择单元格 With Cells(ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB(255, 220, 100) '橙子 .Select '我们选择一个单元格 End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
这是我们下一个示例的起点:
您可以下载Excel示例文件:userform4.xls
运行表单时,我们希望将 4 个国家/地区加载到下拉列表中(使用 AddItem 方法):
Private Sub UserForm_Initialize() For i = 1 To 4 '=> 填写4个国家 ComboBox_Country.AddItem Cells(1, i) '我们使用循环将 A1 到 A4 单元格的值相加 Next End Sub
当下拉列表的值发生变化时,我们希望使用与前一个类似的循环来添加所选国家/地区的城市。
为此,我们需要知道列的数量,以及该列中城市(行)的数量。
ListIndex 属性包含下拉列表中所选项目的序列号(与 Value 不同,后者包含列表项目的值)。请注意,ListIndex 以数字 0 开头。
列号通过以下方式获得:
column_number = ComboBox_Country.ListIndex + 1
要获取特定国家/地区所选列中的行数,我们可以找到最后一个非空单元格的编号:
rows_number = Cells(1, column_number).End(xlDown).Row
使用此信息,现在可以创建一个循环将城市添加到列表中:
Private Sub ComboBox_Country_Change() '清除列表(否则,将立即添加城市) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer '所选元素的序列号(ListIndex以0开头): column_number = ComboBox_Country.ListIndex + 1 '所选列中包含国家/地区的行数: rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> 用城市填充列表 ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
注意:我们可以缩短代码,但这会降低其可读性:
Private Sub ComboBox_Country_Change() ListBox_Cities.Clear For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1) Next End Sub
我们选择的城市将被输入到“选择”文本字段中(“Choice”):
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
您可以在此 Excel 文件中看到完成的示例: userform4b.xls