控件 (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