You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access VBA 循环中如何为序号递增的gblDriver系列全局变量动态赋值

解决方案

VBA 不支持直接通过拼接字符串的方式动态访问变量名,你可以从以下两种方案里选适合你的:

方案1:用Eval函数动态赋值(不需要修改原有全局变量定义)

Access VBA 内置的Eval函数可以执行字符串格式的表达式,你只需要把原代码里的gblDriver1 = strDriver替换成以下代码即可:

' 先转义字符串里的双引号,避免表达式执行出错
strDriver = Replace(strDriver, """", """""")
Eval "gblDriver" & i & " = """ & strDriver & """"

如果你的全局变量定义在标准模块里,不需要做其他调整就能直接生效。

方案2:改用数组存储数据(更推荐,后续维护更方便)

你现在用多个独立全局变量的写法扩展性很差,建议直接改成数组类型的全局变量:

  1. 找到你原来定义全局变量的地方,把原来的Public gblDriver1 As String、Public gblDriver2 As String这类定义删除,替换成:
' 后面的上限你可以根据自己最大需要的天数调整,比如最多选30天就写30
Public gblDriver(1 To 30) As String
  1. 然后把原代码里的gblDriver1 = strDriver直接改成:
gblDriver(i) = strDriver

后续你要调取对应日期的司机数据时,也可以直接用gblDriver(1)、gblDriver(2)这种形式读取,还支持循环遍历处理,比多个独立变量灵活很多。

额外优化建议

你当前的代码里每次循环都重复声明db、rst变量,还重复打开关闭数据库连接,可以把这部分提到循环外面,减少资源消耗:

Private Sub Command95_Click()
    Dim i As Integer
    Dim j As Integer
    Dim oApp As New Outlook.Application
    Dim oEmail As Outlook.Mailitem
    Dim strDriver As String
    Dim rosteredDay As Date
    Dim strSQL As String
    ' 把数据库和记录集声明提到循环外
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    
    j = cboNumberOfDays
    Set db = CurrentDb ' 只打开一次数据库连接
    
    For i = 1 To j
        rosteredDay = Form.Controls("cboDate" & i).Value
        strSQL = "SELECT tblRoster.RosterID, tblRoster.DateRoster, tblDriver.Driver " & _
        " FROM tblRoster INNER JOIN tblDriver ON tblRoster.RosterID = tblDriver.RosterID " & _
        " WHERE (((tblRoster.DateRoster)= #" & Format(rosteredDay, "yyyy-mm-dd") & "#));"
        
        Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
        
        If rst.EOF And rst.BOF Then
            MsgBox "No drivers found for the required date!"
        Else
            strDriver = ""
            Do Until rst.EOF
                strDriver = strDriver & rst![Driver] & "; "
                rst.MoveNext
            Loop
            ' 这里用你选的方案赋值即可
            gblDriver(i) = strDriver
        End If
        
        rst.Close
        Set rst = Nothing
    Next i
    ' 循环结束再关闭数据库
    Set db = Nothing
End Sub

内容的提问来源于stack exchange,提问作者briggal1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:15:04