使用随机数执行计算

时间:2016-03-19 00:20:44

标签: vba random powerpoint-vba

我正在尝试制作一个数学练习powerpoint,在这里,学生会被使用数字1 - 20来呈现随机添加问题。我一直在研究David Marcovtiz(和其他人)的教程并且正在使用他的代码作为起点。由于我的观众是年轻学生,我希望数学问题不是在消息框中,而是在文本框或形状之类的东西中,我可以自定义并为年轻学生提供大的视觉吸引力。

那么,我想做什么...... 在powerpoint show中

  1. 学生可以点击“开始使用”按钮,将其带到下一张幻灯片
  2. 下一张幻灯片会自动生成两个学生必须一起添加的随机数。
  3. 学生输入答案
  4. 如果答案是正确的 - 我想要一些东西来表示答案是正确的,但不是他们必须点击关闭的东西。理想情况下,一个小星星在角落闪烁然后消失
  5. 如果答案不正确,消息或图片会闪烁然后消失。

  6. 自动/随机生成新的添加问题 我想设置添加问题的数量,例如然后,将幻灯片移动到评分幻灯片,该评分幻灯片显示他们在图片中的分数,例如,每个正确答案的明星。

  7. 更新: 使用Activex文本框:

    我已经成功使用了activex文本框,能够随机显示两个数字并将它们相乘并在第三个activex文本框中显示答案,我将其隐藏在幻灯片中。我使用第四个作为输入框,让学生输入他们的答案。如果这与第三个框中的答案相同,我可以显示一个星形并清除框然后移动到下一张幻灯片。如果它不一样,我可以去显示另一张图片,然后转到下一张幻灯片。 (我原本希望幻灯片更新并使用一张幻灯片提出20个问题,但发现这很困难。)

    目前,这需要单击三个命令按钮。

    我已经成功至今(我知道这会显得很伤心,你可能是不稳定的,而且是重大的成就对我和“位”的工作),我可以管理它的乘法但当我+价值,例如9 + 3,我得到93

    Private Sub CommandButton1_Click()
        TextBox1.Value = Int(10 * Rnd)
        TextBox2.Value = Int(10 * Rnd)
        TextBox3.Value = TextBox1.Value * TextBox2.Value
    End Sub
    
    Private Sub CommandButton2_Click()
        If TextBox4.Value = TextBox3.Value Then
            ActivePresentation.Slides("problem").Shapes("badge5").Visible = True
            ActivePresentation.Slides("score").Shapes("badge5").Visible = True
        Else 
            ActivePresentation.Slides("problem" _).Shapes("incorrect").Visible = True
    
            TextBox1.Value = ""
            TextBox2.Value = ""
            TextBox3.Value = ""
            TextBox4.Value = ""
        End If
    End Sub
    
    Private Sub CommandButton3_Click()
        SlideShowWindows(1).View.Next
    End Sub
    

    我需要什么

    我希望命令按钮1中的随机数自动激活。

    我想组合命令按钮2和3并在星形或不正确的形状出现之后包括等待时间,然后移动到下一张幻灯片但是我找到的代码将等待时间应用于整个序列,因为我不是确定如何包含它。

    Private Sub Time_Click()
        iTime = 2#
        Start = Timer
    
        While Timer < Start + iTime
        Wend
    
        With SlideShowWindows(1).View.Next
        End With  
    End Sub
    

    使用形状 我更喜欢使用普通的文本框或形状,但...... 我已设法生成形状中的随机数,但无法将它们相乘,并让学生输入一个activex文本框,确定它是正确还是不正确。我认为问题在于尝试使用两种形状和一个activex文本框。

    我想使用形状,因为我想创建可以使用以下代码选择的主幻灯片布局 - 虽然这不是交易破坏者。

    Sub background()
        ActivePresentation.Slides.Range(Array(2, 3, 4, 5)).CustomLayout_ 
        = ActivePresentation.Designs(1).SlideMaster.CustomLayouts(6)
    End Sub
    

    我觉得这是其他教育工作者可以使用的东西,如果有人愿意并且能够协助编码,我很乐意发布完成的节目。我非常感谢贡献者的宽容和耐心,这些贡献者向像我这样的人一样首先跳了起来,兴奋起来,但却挣扎着。

1 个答案:

答案 0 :(得分:1)

所以,为了分解你在“我需要什么”部分中要求的部分,我将把答案分成两部分:

“我希望命令按钮1中的随机数字自动激活。”

我认为“自动”的意思是,您希望在用户回答上一张幻灯片中的问题后,“下一张”幻灯片会自动填充值。要完成此功能,我将调用CommandButton1当前在CommandButton2中的所有逻辑运行后调用的方法。

“我希望将命令按钮2和3组合在一起,并在移动到下一张幻灯片之前显示星形或不正确的形状之后的等待时间......”

我只需将两个函数的代码与两位代码之间的等待函数组合在一起。我不确定你在哪里找到你为“Timer_Click”功能发布的代码,我认为这不会像目前发布的那样工作。我通常会使用此answer中提到的“等待”方法。

在更改两个新要求的代码之后,结果将是这样的:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub CommandButton2_Click()
    'Command Button 2(code)
    If TextBox4.value = TextBox3.value Then
        ActivePresentation.slides("problem").Shapes("badge5").visible = True
        ActivePresentation.slides("score").Shapes("badge5").visible = True
    Else
        ActivePresentation.slides("problem").Shapes("incorrect").visible = True

        TextBox1.value = ""
        TextBox2.value = ""
        TextBox3.value = ""
        TextBox4.value = ""
    End If

    'Wait code here(1000ms)
    Sleep 1000

    'Command Button 3(code)
    SlideShowWindows(1).View.Next

    'Call the command for CommandButton1, 
    'this will "automatically" populate the slide with new values
    CommandButton1_Click
End Sub