到这一步,我们的设计目标已经完成,但是还有一个小问题,我们前面提到在表中进行剪切、粘贴的时候,会针对每一个可能会受影响的单元格触发PrepareEdit事件,这样的特性会给本例带来一些副作用,如果你在县市列复制粘贴1000行数据,那么就会触发一千次PrepareEdit事件,这可能需要一个漫长的执行过程。显然本例的PrepareEdit事件,只是针对正在编辑的单元格,也就是焦点所在单元格,对于因为受粘贴而影响的其他单元格,并没有必要执行此事件。为此,我们将PrepareEdit事件代码改为:
If
e.IsFocusCell Then '如果是焦点所在单元格
If e.Col.Name = "县市" Then '如果正在编辑的是县市列
If e.Row.IsNull("省市") Then '如果省市列的内容为空
e.Col.Combolist = "" '清除县市列的列表项目
Else
'从行政区域表提取该省事的县市作为列表项目
e.Col.Combolist = DataTables("行政区域").GetComboListString("县市", "[省市] = '" & e.Row("省市") & "'")
End If
End If
End If