Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 当用户位于单元格内时,分配单元格的值_Vba_Excel - Fatal编程技术网

Vba 当用户位于单元格内时,分配单元格的值

Vba 当用户位于单元格内时,分配单元格的值,vba,excel,Vba,Excel,我试着创建一个while循环,以确保它在用户键入时被设置,但是当它试图赋值并且用户已经在键入某个内容时,宏似乎神奇地停止了 基本上,如何阻止宏在这种意外情况下结束,以及如何检测用户是否阻塞?从您的评论中,您对VBA的工作方式有误解 首先,从模块运行的宏正在控制工作簿,您无法在一段时间内检测到用户输入或类似的for循环,您需要使用本教程中的事件侦听器: 对于工作表/工作簿,基本上使用“专用子工作表\u Change”选项。 另外,如果您只监视一个单元,请查看此这不是很清楚。例如,第一句中的“it”

我试着创建一个while循环,以确保它在用户键入时被设置,但是当它试图赋值并且用户已经在键入某个内容时,宏似乎神奇地停止了


基本上,如何阻止宏在这种意外情况下结束,以及如何检测用户是否阻塞?

从您的评论中,您对VBA的工作方式有误解

首先,从模块运行的宏正在控制工作簿,您无法在一段时间内检测到用户输入或类似的for循环,您需要使用本教程中的事件侦听器: 对于工作表/工作簿,基本上使用“
专用子工作表\u Change
”选项。
另外,如果您只监视一个单元,请查看此

这不是很清楚。例如,第一句中的“it”指的是什么?宏?while循环?但是,“设置”宏或循环意味着什么?还有——宏运行时,如何输入?您是否正在使用
DoEvents
?也许您可以发布代码并更精确地描述问题。如果用户处于“编辑模式”,宏通常不会运行,VBA无法直接检测到:@JohnColeman非常简单,我正在检查单元格是否有更改,当更改发生时,我让它将相邻单元格的值更改为一个时间。它工作正常,但如果用户处于Tim称之为的编辑模式,则我的宏将停止运行。@例如,TimWilliams,我运行了一个长时间循环的宏,并更改单个单元格的值。只要用户在尝试为单元格赋值时未处于编辑模式,它就可以正常运行。当这种情况发生时,代码会突然停止。这太疯狂了!如果我在内存中打开了文件怎么办!?在这个简单的例子中,我只想循环指定单元格值,直到它允许我,但宏似乎突然停止。谢谢你的帮助。我的问题不是我不能检测到用户输入,而是用户输入突然在运行中间停止了我的宏。这是一个严重的问题,因为我也有宏打开内存中的文件。但我面临的直接问题不是,而是我正在尝试将单元格A1更改为TRUE,例如,当用户编辑其他单元格时。问题是,我的宏需要一段时间才能运行,因此您需要在工作表上工作,然后当它到达要分配单元格A1的点时,BAM整个宏将停止运行,这是不好的。我尝试使用Application.OnTIme来等待用户输入完成,但这无法工作,因为Application.OnTIme在用户完成时停止在输入模式下。这太疯狂了,因为其他代码在用户处于输入模式时运行,给了我各种致命的内存泄漏。每个人都说废话代码不能在编辑模式下运行,这是不对的,它当然可以,当你在编辑模式下,只有某些代码会导致你的整个代码停止运行!
Function IsEditing() As Boolean

    If Application.Interactive = False Then
        IsEditing = False
        Exit Function
    End If

On Error GoTo err:
    Application.Interactive = False
    Application.Interactive = True

    IsEditing = False
    Exit Function

err:
    IsEditing = True
    Exit Function
End Function