在“ DoEvents”期间将用户踢出单元格

时间:2018-12-29 09:39:33

标签: excel vba excel-vba

在用户编辑单元格时,是否可以使用VBA按下Enter键或按下该键或选择另一个单元格?我正在为孩子们创建测验,并希望确保孩子们在输入答案后不会按Enter键。

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

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

由于用户将是孩子,所以我希望它尽可能地防弹。 为此,我计划进行以下操作:

-大多数工作表都将受到保护,因此它们几乎无能为力。

-自动选择了答案单元格,因此孩子们只需输入数字即可。

-在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

2 个答案:

答案 0 :(得分:0)

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

可以进行第二个注释并控制每个击键是可能的,但是绝对可以用困难的方式来完成,接管通常由Excel处理的工作。最好用Python或其他方式编写它-如果您可以访问服务器,则可以创建一个活动的网页解决方案。

如果重新考虑基本设计,则可以轻松地保留在Excel中:如果这是多项选择,这真的是不好的教学法吗?您可以输入很多选择,就像每个数字一样。

用数字顺序填充一堆可能的答案的单元格,以便孩子可以快速找到“ 37”。电子表格可以紧凑地在10x10矩阵中显示1-100,并提供100种选择。只需设置一个OnClick工作表事件-如果孩子点击了正确的单元格,是的,否则会出错。六秒钟后的OnTime事件会取消OnClick事件并弹出“ Too Late”消息。

以这种方式解决了几行,它与Excel擅长的东西一起工作而不是与之抗争。

答案 1 :(得分:0)

我喜欢罗伊(Roy)的建议,即从可能的解决方案表中为孩子点击选择答案。

如果您确实希望孩子们在其中键入内容,则应考虑创建UserForm。这将使您能够进行一些不错的操作,例如先显示然后时钟倒计时分配给他们的6秒,然后将它们的各种答案保存到可以标记的变量中,或者稍后以管理员的身份推送给您。 (例如,可能保存到隐藏的工作表中)。

这还将阻止您的孩子点击您的“答案”单元格,只需输入问题即可生成正确的答案。 6s是很长一段时间才能输入的!数据验证规则不会阻止您的孩子使用公式作弊。

菲尔