2015-08-21 71 views
-1

我试着创建一个while循环以确保它在用户键入的情况下被设置,但它似乎像宏在试图赋值时魔法停止并且用户已经在打字了。当用户在单元格内时,为单元格赋值

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

+0

这是不是很清楚。例如 - 第一句中的“it”是指什么?宏? while循环?但是 - “设置”一个宏或一个循环意味着什么?而且 - 宏在运行时如何输入?你在使用DoEvents吗?也许你可以发布代码并更准确地描述问题。 –

+0

如果用户处于“编辑模式”,宏通常不会运行,并且VBA无法直接检测到:https://social.msdn.microsoft.com/Forums/en-US/3333e18b-cef3-4d78-b47a -6916a1b2d84c/excel-edit-mode?forum = isvvba –

+0

@JohnColeman非常简单我正在检查一个单元格的变化,当发生变化时,我将它改变了一个相邻单元格的值。它工作正常,但如果用户处于编辑模式,因为Tim称它为我的宏停止运行。 – CodeCamper

回答

1

从您的意见中,您对VBA的工作原理有一种误解。

首先,模块中的宏运行正在控制工作簿,您无法在一段时间内检测到用户输入或像这样的循环,所需要的是使用本教程中的事件侦听器:a good site for vba basics basiclly使用“Private Sub Worksheet_Change”选项的工作簿/工作簿。 还,如果你只监控一个单元,看看这个how to use worksheet change

+0

感谢您的帮助。我遇到的问题不是我无法检测到用户输入,而是用户输入在运行过程中突然停止了我的宏。这是一个严重的问题,因为我也有打开内存中的文件的宏。但是我所遇到的直接问题不是这样,而是我试图在用户编辑其他单元格时将单元格A1更改为TRUE。问题是我的宏需要一段时间才能运行,因此你在工作表上工作,然后在BAM达到要分配单元格A1的位置时,整个宏将变为kaplut,这并不好。 – CodeCamper

+0

我曾尝试使用Application.OnTIme或许等待用户输入完成,但这不能工作以太,因为Application.OnTime在用户处于输入模式时停止。这太疯狂了,因为其他代码在用户处于输入模式时运行,给我带来了各种致命的内存泄漏。大家都说blah blah代码不能在编辑模式下运行,这是不正确的,它当然可以,并且当您处于编辑模式时,只有某些代码会导致您的整个代码停止运行! – CodeCamper

0
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 
相关问题