Ms access 加载userform时访问崩溃

Ms access 加载userform时访问崩溃,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我已经构建了我的应用程序,但是出现了一个问题,我无法解决这个问题——我的应用程序还没有autoexec,所以我打开access并双击我的用户表单来打开它 打开用户窗体时,Access崩溃并关闭 但是,如果我首先将userform放在design视图中,然后在form视图中打开表单,则效果很好 这怎么可能 它不能是表单加载编码,否则从设计视图转到表单视图时仍会崩溃 我将包括我的表单加载编码,以防: Me.LastImport.Value = DLast("LastImport", "tbl_Imp

我已经构建了我的应用程序,但是出现了一个问题,我无法解决这个问题——我的应用程序还没有autoexec,所以我打开access并双击我的用户表单来打开它

打开用户窗体时,Access崩溃并关闭

但是,如果我首先将userform放在design视图中,然后在form视图中打开表单,则效果很好

这怎么可能

它不能是表单加载编码,否则从设计视图转到表单视图时仍会崩溃

我将包括我的表单加载编码,以防:

Me.LastImport.Value = DLast("LastImport", "tbl_Import_Export_logger")
Me.Text42.Value = Date
Me.Text44.Value = Date - Weekday(Date, 3)

'Compliance Reporting
Me.Text68 = DCount("[CustomerAccountNumber]", "Q_HealthChecksOverdue") 'Overdue Health Checks
Me.Text76 = DCount("[CustomerAccountNumber]", "Q_HealthChecksdue") ' Due Health Checks
Me.Text74 = DCount("[CustomerAccountNumber]", "Q_HealthChecksCompleted") ' Completed Health Checks
Me.Text72 = DCount("[LettersDueStatus]", "Q_LettersSent_Query") 'Count number of letters sent
(最初写在堆栈溢出文档中)

如何排除访问崩溃故障 当您收到错误:“Microsoft Access遇到问题,需要关闭”时,通常没有太多信息可帮助您确定错误原因。以下是您可以采取的一系列步骤,以排除错误的原因

反编译数据库 这应该始终是您的初始修复。一个好的策略是在每次发布之前对数据库进行反编译

  • 创建反编译快捷方式

    这将使用“/反编译”开关加载数据库

  • 右键单击数据库文件。选择“复制”
  • 在资源管理器窗口中单击鼠标右键,然后选择“粘贴快捷方式”
  • 右键单击快捷方式并选择“属性”
  • 在目标框中,转到行尾并添加
    /decompile
  • 单击“确定”关闭快捷方式
  • 使用Shift打开数据库。

    双击此快捷方式时按住shift键。 这将防止在数据库中执行任何自动运行。 你应该直接进入导航窗口

  • 压缩并修复数据库。

    加载数据库后,需要单击“压缩并修复”按钮

  • 找到“工具”功能区上的“压缩和修复数据库”按钮

  • 按住Shift键。按住它,同时单击“压缩和修复”按钮

  • 重新编译数据库

  • 进入VBA窗口(Control+G)

  • 从菜单中选择调试->编译
  • 这是完整的反编译过程。一般来说,它应该修复99%的访问崩溃或奇怪的表单行为

    重建整个数据库 这是一个很大的工作,所以在用尽所有其他选择后,作为最后手段来做这件事。只有当问题发生在不同的用户、不同的机器上时,才需要这样做。如果不是所有用户都发生这种情况,则很可能不是损坏的数据库容器

    与删除二进制数据的步骤类似,您将从头开始重建数据库。这个过程有点仪式化,但如果谨慎地进行,不“保留”任何可能的腐败,那么这个过程是非常有效的

    创建新的access数据库容器。

    • 在Access中的“文件”选项卡上,可以选择“新建”。以ACCDB格式创建新的空数据库
    将所有对象移动到新容器中

    不要使用Access中的导入/导出功能移动对象,不要简单地单击和拖动。这样做会将损坏的项目复制到新容器中

    表格:

    • 对于旧access容器中的每个表,在新容器中创建一个新表
    • 从“设计”视图中,复制/粘贴字段定义
    • 检查表属性以确保它们在两个数据库中匹配
    • 同时移动任何数据宏(有关如何执行此操作,请参阅“宏”部分)
    • 要移动数据,请将旧数据导出为XML或CSV,然后从该格式导入
    查询:

    • 将每个查询加载到SQL视图中
    • 复制/粘贴SQL文本
    • 粘贴到新数据库中
    • 比较查询属性以确保它们匹配
    表格/报告:

    • 对于每个表单/报表,使用Application.SaveAsText函数将表单/报表导出到文本文件
    • 删除二进制数据(请参阅从表单文档中删除二进制数据以熟悉此过程)
    • 使用Application.LoadFromText函数将对象重新导入新数据库

    移动宏有三种方法

  • 在新的数据库容器中手动重新创建每个宏
  • 使用带有
    acMacro
    参数的
    Application.SaveAsText
    /
    Application.LoadFromText
    方法
  • 复制/粘贴每个宏的宏定义
    • 选择全部(Control+A)以选择所有宏元素。然后复制(控制+C)
    • 打开空白记事本文档并粘贴(Control+V)宏XML
    • 在新数据库容器中创建新的空白宏
    • 在记事本中,选择所有文本(Control+A)。然后复制(控制+C)
    • 在空白宏中,粘贴(控件+v)。应显示宏。保存它
  • 模块

    • 对于每个模块,选择所有代码(Control+A)并将(Control+V)粘贴到新的数据库容器中
    • 确保检查数据库属性(在VBA窗口中,转到工具->客户端属性)
    数据宏

    对于每个数据宏,使用SaveAsText/LoadFromText方法

  • 进入VBA即时窗口(Control+G)
  • 键入
    Application.SaveAsText acTableDataMacro,“MyTableName”,CurrentProject.Path&“\MyTableName.txt”
    (将MyTableName替换为包含数据宏的表的名称)
  • 检查文件是否有任何腐败迹象
  • 在新的数据库容器中,使用
    Application.LoadFromText acTableDataMacro,“MyTableName”,CurrentProje加载定义