Excel 在显示Userform时,如何防止用户执行其他操作?

Excel 在显示Userform时,如何防止用户执行其他操作?,excel,vba,Excel,Vba,正如标题所说,我有一个Excel文件,其中有一个宏正在加载,我想让它在宏运行时用户不能使用计算机 这是一个简单的数据输入表单。然而,大多数时候,用户只是忽略它,让它在后台运行,而他们在做其他事情 有没有可能在显示用户表单时,他们不能在计算机上执行任何其他操作来强制他们输入数据 我尝试了各种方法,从发出警报到让他们在不输入数据的情况下无法关闭表单,但到目前为止,没有任何效果。你无法做到这一点。您的表单位于EXCEL.EXE进程空间中,除非EXCEL.EXE这样说,否则无法告诉Windows EXC

正如标题所说,我有一个Excel文件,其中有一个宏正在加载,我想让它在宏运行时用户不能使用计算机

这是一个简单的数据输入表单。然而,大多数时候,用户只是忽略它,让它在后台运行,而他们在做其他事情

有没有可能在显示用户表单时,他们不能在计算机上执行任何其他操作来强制他们输入数据


我尝试了各种方法,从发出警报到让他们在不输入数据的情况下无法关闭表单,但到目前为止,没有任何效果。

你无法做到这一点。您的表单位于EXCEL.EXE进程空间中,除非EXCEL.EXE这样说,否则无法告诉Windows EXCEL.EXE就是它要做的全部工作


这不是VBA限制-您不能让一个进程劫持机器上所有其他进程中的所有消息循环,这会导致灾难。我不希望操作系统以任何方式、形状或形式让您这样做。

与上述内容相结合,它的最佳实践是不激怒您的用户。然而,如果它是一个应用程序,在一台机器上有一个唯一的功能,即一个访问者日志,那么你可以使表单成为最顶层的表单

例如,有关示例和windows API函数的声明,请参见


另一种方法是设置计时器并用声音提醒用户…

以模态方式显示它。假设这是可能的,为什么要阻止用户做任何事情?这是一个可怕的想法-您无法知道是否有其他不间断进程正在运行。如果我打开了一个Excel文件,它会直接进入回收站,因为这是一种近乎恶意的行为。如果你的应用程序设计必须锁定整个计算机才能工作,那么这表明你需要放弃它。几十年来,应用程序一直设计为在多任务环境中工作。为了强调这一点,上一次Windows应用程序可以在系统范围内运行是在。。。视窗3.1。从95年起,这是不可能做到的,这是有充分理由的。将应用程序设计为在该环境中优雅地工作,而不是试图劫持操作系统。@Barbaaz听起来这是管理问题,而不是编程问题。如果用户拒绝正确完成他们的工作,他们需要警告和解雇。