VBA代码在使用RefreshLink循环后停止

时间:2014-04-11 14:22:49

标签: vba ms-access access-vba ms-access-2010

以下代码更新了我的表和选定后端之间的链接。我确认在运行代码时更新适用于所有表。但是,成功更新链接后,执行将中断,并且不会显示错误消息。后面的MsgBox (TableLinked)不会执行。

当初始If语句求值为False时,MsgBox (TableLinked)被执行,这告诉我循环中有挂起。

关于这里发生了什么的任何想法?

If Not GetBackend = "" Then
    For i = 0 To Db.TableDefs.Count
        If Not Db.TableDefs(i).Connect = "" Then
            Db.TableDefs(i).Connect = ";DATABASE=" & GetBackend
            Db.TableDefs(i).RefreshLink
            TableLinked = True
        End If
    Next i
Else
    TableLinked = False
End If

MsgBox (TableLinked)

修改

好吧,我会假设我的下标超出了范围(尽管如果是这样,它就会无声地失败)。当我在第2行For i = 0 To Db.TableDefs.Count - 1中执行此操作时,我的代码在循环之后继续存在。其他人有过这种情况吗?我的解决方案仍然没有回答我的问题,因为我仍然不确定是什么打破了代码。

1 个答案:

答案 0 :(得分:3)

TableDefs集合的成员项从零开始编号。这意味着最后一个项目的索引号比项目数少一个。坦率地说,我不明白为什么你的代码没有抛出错误#3265,"此集合中找不到项目" ...因为相当于TableDefs(TableDefs.Count)尝试引用不存在的TableDef

像这样修改你的代码......

'For i = 0 To Db.TableDefs.Count
Dim lngLastItem As Long
lngLastItem = (Db.TableDefs.Count - 1)
For i = 0 To lngLastItem
    If Not Db.TableDefs(i).Connect = "" Then
    ' and the rest ...