excel vba级联

1 选择省 然后可以选择对应的城市
完成后的最终效果如下:


excel vba级联_第1张图片
最终效果

首先建立如下表格


excel vba级联_第2张图片
建立初始表格

然后选择菜单-公式-名称管理器,建立两个一级条目
excel vba级联_第3张图片
建立两个一级条目

然后选择A6单元格,选择菜单-数据-数据验证的第一个选项,允许处选择序列,来源处注意。

excel vba级联_第4张图片
数据有效性

现在省份可以选择了


excel vba级联_第5张图片
选择省份

在选中B6单元格,选择菜单-数据-数据验证的第一个选项,允许处选择序列,来源处注意。

excel vba级联_第6张图片
选择城市

大功告成!

excel vba级联_第7张图片
基本的级联

发现个问题,选择苏州后城市一栏还是河北的城市,也就是需要清空下城市,这时就得用vba了。
在下方的sheet1处右击,选择查看代码...

excel vba级联_第8张图片
查看代码

这时弹出VBE编辑窗口,输入下面这段代码

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$6" Then Range("$B$6").ClearContents
End Sub

当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生触发上面代码。
当用户切换的是A6单元格的内容,则会将B6的内容清空。
效果如下

excel vba级联_第9张图片
切换时清空城市

现在还有一种特殊需求,即当选择的是河北时,城市处需要变灰,而且不可编辑,不可选择;当省份是江苏时,可以正常选择。
最终代码如下


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = [b6].Address Then Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$6" Then Range("$B$6").ClearContents
If [a6] = "河北" Then
    Cells(6, 2).Interior.ColorIndex = 15
    Else
    Cells(6, 2).Interior.ColorIndex = 0
End If
End Sub

第一段代码是禁止了B6单元格的双击事件
第二段是如果选择的是河北则B6单元格颜色置灰
同时需要重新设置名称选择器,编辑名称管理器内的河北,改成如下所示,点击确定

excel vba级联_第10张图片
修改名称管理器

最终效果如图:

excel vba级联_第11张图片
最终效果

你可能感兴趣的:(excel vba级联)