excel - 在 "DoEvents"期间将用户踢出单元格

标签 excel vba

当用户编辑单元格时,有一种方法可以使用 VBA 按 Enter 或向下键或选择另一个单元格吗?我正在为 children 创建一个测验,并希望确保 child 在输入答案后不会按 Enter 键,代码不会中断。

抱歉,如果不清楚,我是 VBA 新手。

我正在尝试为一些学生创建 5 次表测验。 该宏的目的是发布问题,然后让他们有 6 秒的时间回答,然后休息 3 秒。

由于用户是 child ,我希望使其尽可能防弹。 为此,我计划执行以下操作:

-工作表的大部分内容都会受到保护,因此他们只能做很少的事情。

-答案单元格会自动选择,因此 children 只需输入数字即可。

-在 6 秒结束时,代码将他们踢出答案单元格并检查答案。

我正在为最后一个子弹而苦苦挣扎,特别是当学生仍在编辑答案单元格时踢他们。我尝试过:Application.SendKeys“{ENTER,False}”。

Sub Test()

Dim PauseTime, BreakTime, time1, time2, time3, i
i = 1
Do While i < 13
    Sheets("Test_SG").Range("N_1").Value = i
    Sheets("Test_SG").Range("N_2").Value = 5    
    Sheets("Test_SG").Range("Answer").Select
    PauseTime = 6    ' Set question duration.
    BreakTime = 3    ' Set break duration.
    time1 = Timer    ' Set start time.
    time2 = Timer + PauseTime
    time3 = Timer + PauseTime + BreakTime
    Do Until time1 >= time2
        DoEvents ' Yield to other processes.
        time1 = Timer   
    Loop
    Application.SendKeys "{ENTER,False}"
    If Sheets("Test_SG").Range("Answer") = i*5 Then
        Sheets("Teacher_Zone").Range("Start").Offset(0,i).Value = "Y"
    Else
        Sheets("Teacher_Zone").Range("Start").Offset(0,i).Value = "N"
    End If
    Sheets("Test_SG").Range("A1").Select
    Do Until time1 >= time3
        time1 = Timer
    Loop
i = i + 1
Loop

End Sub

最佳答案

您在这里会遇到一些阻力(“为什么使用 Excel?”),因为 Excel 在输入过程中非常非常保护用户。在输入到工作表(或表单中的输入框)期间夺取控制权几乎是不可能的。我在相当多的搜索中找不到建议,并且只有在输入用户按 ENTER 键后才会处理“OnTime”事件。

必须达到第二条注释的程度并控制每次击键是可能的,但绝对是困难的方式,接管您通常让 Excel 处理的工作。不妨用 Python 或其他东西编写它 - 如果您可以访问服务器,也许可以创建一个事件网页解决方案。

如果您重新考虑您的基本设计,您可以轻松地留在 Excel 中:如果是多项选择,这真的是糟糕的教学法吗?您可以输入很多选择,例如每个数字。

按数字顺序填写一堆可能的答案,以便 child 可以快速找到“37”。电子表格可以在 10x10 矩阵中紧凑地显示 1-100,并给出 100 个多项选择。只需设置一个 OnClick 工作表事件 - 如果 child 单击右侧的单元格,是的,否则会出错。六秒后的 OnTime 事件会取消 OnClick 事件并弹出 Too Late 消息。

通过这种方式只需几行即可解决,并且它可以与 Excel 所擅长的功能配合使用,而不是与其对抗。

关于excel - 在 "DoEvents"期间将用户踢出单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968373/

相关文章:

excel - 如何编写一个excel公式来根据单元格的内容从一个范围内返回一个值?

excel - 有没有办法循环浏览excel工作表中的所有模块,然后全部删除?

Excel 2003 VBA 代码在单步执行时有效,但在完全运行时无效

c++ - 如何使用自动化在 C++ 中迭代 Excel 列的集合?

sql - Excel数据透视表sql中的别名错误

vba - 在任何事件工作表而不是工作表 1 上运行的代码

Excel VBA - 获取网站上的所有 href 链接

excel - 使用 ListRows.Item(i).Delete 从 Excel 表中删除行时速度较慢

VBA 在表格上设置缩放级别

VBA方法excel根据值将单元格移动到其他行