2

我在 Access 2010 中有一个运行没有问题的项目。也就是说,直到我添加断点并尝试调试代码。一旦到达第一个断点,VBA 项目就会打开,大约 1 秒后 Access 崩溃并重新启动。我可以添加一个 Debug.Print 并且一切正常。我只是无法单步执行代码。

修复和压缩不起作用,也没有创建新项目并导入所有内容。

看着事件查看器,我得到:

Faulting application name: MSACCESS.EXE, version: 14.0.4750.1000, time stamp: 0x4b8bae0f
Faulting module name: ntdll.dll, version: 6.2.9200.16579, time stamp: 0x51637f77
Exception code: 0xc0150010
Fault offset: 0x00000000001041c0
Faulting process id: 0x2ef4
Faulting application start time: 0x01cf180a44c35b8a
Faulting application path: C:\Program Files\Microsoft Office 2010\Office14\MSACCESS.EXE

我无法注销和重新注册 DLL(找不到入口点)。我已经尝试了http://pcsupport.about.com/od/fixtheproblem/a/ntdlldll.htm上的所有内容,但没有重新安装 Windows,但仍然没有。在安全模式下运行 Access 确实有帮助,但不能永久修复它。

还有其他想法吗?

更新:我现在有一台新笔记本电脑并升级到 Access 365。它仍然会发生。但仅限于一个特定项目。其他项目工作正常。

4

2 回答 2

0

我收到此错误并发现这是因为在使用从 advapi32.dll 库中声明的 GetUserName 函数时未将变量声明为正确的类型。在调用“GetUserName(buffer, Size)”之前,我必须将“Dim buffer As String”更改为“Dim buffer As String * 256”。这是代码:

#If VBA7 Then
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _
  Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
Private Declare Function GetUserName Lib "advapi32.dll" _
  Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

Function getNetworkName() As String
    Dim ret As Long, Size As Long
    Dim buffer As String * 256
       
    Size = 256
    ret = GetUserName(buffer, Size)
    If ret <> 0 Then
        getNetworkName = Mid(buffer, 1, InStr(1, buffer, vbNullChar) - 1)
    Else
        getNetworkName = "API ERROR"
    End If
End Function

我不知道您的问题是否完全相同,但可能是由于这样的数据类型问题。

于 2022-03-04T21:41:57.047 回答
0

似乎这不是第一次发生这种类型的错误https://docs.microsoft.com/en-us/answers/questions/269052/vba-access-stop-command.html

上面的链接很详细(文字+截图),可能和你体验的差不多。

无论如何...请尝试access使用该选项打开您的软件run as administrator(右键单击access图标并选择此选项)。有机会vba尝试使用提升的权限而没有它 - 它会导致严重的崩溃

于 2022-01-25T07:22:02.403 回答