Microsoft Access VB:使用变量作为字段名称的一部分

时间:2012-04-04 20:25:51

标签: ms-access access-vba

长时间潜伏,第一次海报。我有一个非常简单的数据库,可以根据未绑定的组合框更新计算机实验室座位表,教师可以选择他/她的班级。

我现在所拥有的是:

Private Sub Combo29_AfterUpdate()
If DCount("[StudentName]", "SelectedClass", "[StudentNumber]=1") <> 1 Then Me!Computer1.Caption = "" Else Me!Computer1.Caption = DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = 1")

技术上工作得很好,但不是重复相同的行,而是将数字1更改为数字2,依此类推,对于所有25台计算机,我宁愿有一些效果:

Private Sub Combo29_AfterUpdate()
Dim PCnumber as Integer
PCnumber = 0
NextPC:
PCnumber = PCnumber + 1
If DCount("[StudentName]", "SelectedClass", "[StudentNumber]=PCnumber") <> 1 Then Me!Computer & PCnumber & .Caption = "" Else Me!Computer & PCnumber & .Caption = DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = PCnumber")
If PCNumber = 25 Then End Else goto NextPC
End Sub

我浏览了几个主板,但我似乎无法正确地将变量PCnumber作为对表单上标签的引用的一部分进行连接。目前我正在做“漫长的路”,为每台计算机重复整行。然而,这并不是第一次我的这种缺陷为我做了更多的工作,我希望不仅仅是为了解决这个问题,而是为了让我的生活更轻松。

我正在使用Access 2007,而Visual Basic则认为它是6.5。

谢谢,

查克

2 个答案:

答案 0 :(得分:3)

我没有使用过Access 2007,但这可能会替代Me!Computer & PCnumber & .Caption

Me.Controls("Computer" & PCnumber).Caption

我也倾向于将DCount函数更改为:

DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = " & PCnumber)

...但我不经常使用它们,所以它可能会起作用。

另外,您可以在代码中使用以下循环结构而不是GoTo

For PCnumber = 1 to 25 Step 1
    ' code
Next PCnumber

答案 1 :(得分:1)

将GoTo语句用于除错误处理之外的任何其他内容通常被认为是个坏主意。最好使用正确形成的循环或创建单独的子/函数来处理你在GoTo语句下放置的任务(后者不适用于你的情况)。

我会写这样的代码。

Private Sub Combo29_AfterUpdate()
    Dim PCnumber as Integer 'Instantiates as 0
    Do Until PCNumber = 25
        If DCount("[StudentName]", "SelectedClass", "[StudentNumber]=" & PCnumber) <> 1 Then 
            Me.Controls(Me!Computer & PCnumber).Caption = ""
        Else
            Me.Controls(Me!Computer & PCnumber).Caption = DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = " & PCnumber)
        End If      
        PCNumber = PCNumber + 1
    Loop
End Sub