我有一个带有 2 个绑定组合框的测试表单。我正在测试要使用的正确代码,以便在第一个组合框上选择的选项会影响第二个组合框的行源。
组合框 1 是国家/地区名称。我将控件名称分配为cb_country
。我还创建了一个表tbl_country
作为cb_country
的行源。选项包括China
、Japan
、Korea
、Malaysia
、Philippines
和Thailand
。
组合框 2 是大写字母。我将控件名称分配为cb_capital
.我创建了 2 个不同的表作为可能的行源cb_capital
具体取决于在cb_country
上选择了哪个国家/地区。
大写表 1 或tbl_cap1
列出了Beijing
、Tokyo
和Seoul
,而大写表 2 或tbl_cap2
列出了Kuala Lumpur
、Manila
和Bangkok
。
我希望每当选择China
、Japan
或Korea
时tbl_cap1
cb_capital
的行源,并在选择Malaysia
、Philippines
或Thailand
时tbl_cap2
。
下面是cb_country
的After Update
事件代码。
Dim frm As Form
Dim fname As String
fname = "frmgeo"
Set frm = Forms(fname)
Dim n() As String
Dim co As Control
Dim ca As Control
n1 = "cb_country"
n2 = "cb_capital"
Set co = frm.Controls(n1)
Set ca = frm.Controls(n2)
Dim c() As String
c1 = "China"
c2 = "Japan"
c3 = "Korea"
c4 = "Malaysia"
c5 = "Philippines"
c6 = "Thailand"
If co = c1 Or co = c2 Or co = c3 Then
ca = Null
ca.Requery
ca.RowSource = "tbl_cap1"
Else
ca = Null
ca.Requery
ca.RowSource = "tbl_cap2"
End If
该表单如我预期的那样工作正常,但是无论如何代码可以改进吗?也许声明一个整数变量并使用 for-next 语句,因为我在这种情况下对变量名称使用整数?
这就是我的做法,期望代码以表单本身执行:
With Me.Controls("cb_capital")
.Value = Null
Select Case Me.Controls("cb_country").Value
Case "China", "Japan", "Korea":
.RowSource = "tbl_cap1"
Case "Malaysia", "Philippines", "Thailand":
.RowSource = "tbl_cap2"
Case Else
'Raise an error for example.
End Select
.Requery 'I also don't think that it is necessary.
End With
一些解释:
由于代码以保存控件的形式运行,因此我们可以使用
Me
来引用它。并不总是需要使用显式变量,您可以在表达式中使用引用,如下所示。
With
语句保存对控件cb_capital
的引用,您可以通过在With
块中.
来访问它。只要您使用文字(国家/地区名称(,就可以在
Select Case
语句中直接使用它们。关于您使用的逻辑,如果需要,您也可以省略Case "Malaysia", "Philippines", "Thailand":
并使用Case Else
。您的数组定义
n()
和c()
根本没有使用。你使用了未十进制变量(n1
、n2
、c1
-c6
(。您应该在模块中使用Option Explicit
以避免这种情况。