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

Ms access VBA代码在使用RefreshLink循环后停止,ms-access,vba,ms-access-2010,Ms 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.Ta

下面的代码更新我的表和所选后端之间的链接。我已经确认,当我运行代码时,更新对所有表都有效。但是,在成功更新链接后,执行会中断,并且不会显示错误消息。下面的
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行对Db.TableDefs.Count-1的I=0执行此操作时,我的代码在循环后继续存在。还有其他人发生过这种事吗?我的解决方案仍然无法回答我的问题,因为我仍然无法确定是什么破坏了代码。

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

像这样修改你的代码

i=0到Db.TableDefs.Count的
'
暗淡的长发
lngLastItem=(Db.TableDefs.Count-1)
对于i=0到lngLastItem
如果不是Db.TableDefs(i).Connect=“”,则
“其余的。。。

我似乎记得在VBA中出现的大多数索引都是从
1开始的(我错了吗?),而不是从
TableDefs开始的。可能整个索引都向左移动了
1
,这就解释了为什么在减去
1
时它会起作用。不管怎样!:/不客气,斯科特。我认为您仍然应该弄清楚为什么您的原始代码会无声地失败。在我看来,这是不应该发生的,我会担心,无论错误信息被抑制了什么,都可能会在不同的环境中再次伤害到你。我不知道从哪里开始弄清楚这一点。以前从未发生过…有问题的代码出现在从
私有子函数调用的
公共函数中,我认为这不会产生什么影响。在该代码前面的某个地方是否有
On Error…
语句?您对
DoCmd.SetWarnings
Echo
做过什么吗?很好。还可以查看VB编辑器主菜单中的工具->选项。在“选项”对话框的“常规”选项卡上,您可以选择“在所有错误时中断”。这在调试期间可能很有用。。。然后,您可能不需要在错误
语句上旋转现有的
。调试完成后,将选项设置回“未处理错误时中断”。啊!那很方便!再次感谢!