Excel 用于练习的基于时间的VBA脚本

Excel 用于练习的基于时间的VBA脚本,excel,time,loops,vba,Excel,Time,Loops,Vba,我有一个excel电子表格,有两列,一列有练习列表(其中33个)和每个练习的重复次数。我真正想要的是一个程序,它选择一个随机练习,显示它的重复次数,并有一个按钮,上面写着“完成?”当你点击它时,我想要一个计时器,它倒计时20分钟,选择一个新的练习,并等待你点击完成,然后重复 我知道这并不难,但无论如何我都不是程序员。如果有人有教程或其他方法(flash?),我会非常感激 提前感谢,, Jay如果您不习惯使用用户表单等,那么您所要求的并不太难,但也不容易解释 相反,我提出了一个更简单的解决方案,可

我有一个excel电子表格,有两列,一列有练习列表(其中33个)和每个练习的重复次数。我真正想要的是一个程序,它选择一个随机练习,显示它的重复次数,并有一个按钮,上面写着“完成?”当你点击它时,我想要一个计时器,它倒计时20分钟,选择一个新的练习,并等待你点击完成,然后重复

我知道这并不难,但无论如何我都不是程序员。如果有人有教程或其他方法(flash?),我会非常感激

提前感谢,,
Jay

如果您不习惯使用用户表单等,那么您所要求的并不太难,但也不容易解释

相反,我提出了一个更简单的解决方案,可以满足您的需要。出于此解决方案的目的,我假设您的所有练习都列在A列中,重复列在B列中。以下代码将随机选择一个练习,突出显示所选选项,然后在C列中每隔1分钟显示从20分钟到0的倒计时。作为可视化:

        A              B            C
1       Bench press    20 reps  
2       Abs            10 reps      
3       Lateral raise  15 reps      14 mins <-display of minutes remaining
4       Bicep curl     8 reps
5       Calf raise     10 reps
6       etc
最后,在电子表格上,您需要一种启动代码的方法

选择查看>工具栏>表单,然后从菜单中单击
按钮
并将其绘制到电子表格的任意位置。在“分配宏”对话框中,您应该看到“StartExercise”作为一个选项。选择此选项并单击“确定”

现在,当你点击按钮时,你会看到一个练习,重复次数以粗体、红色字体突出显示,旁边会出现“20分钟”。这将倒计时到0分钟。如果你点击这个按钮,你可以重新开始随机练习


希望这有帮助。

这石头!这让我想多运动!:)好消息-很高兴它成功了,你可以在健身房里忙碌起来!还有一件事,如果解决方案适合你,那么点击“勾号”接受答案将被视为本网站的礼貌。这样,其他帮助者可以看到解决方案已被接受,无需进一步帮助
Sub StartExercise()
'Get number of exercises
Dim NumberOfExercises As Integer
NumberOfExercises = Range("A1").End(xlDown).Row - 1

'Reset font to normal black and clear anything in column C
Range("A1:B" & NumberOfExercises + 1).Font.Bold = False
Range("A" & NumberOfExercises + 1 & ":" & "B" & NumberOfExercises + 1).Font.ColorIndex = 1
Range("C1:C" & NumberOfExercises + 1).Clear

'Select a random exercise
Dim RandomExercise As Integer
RandomExercise = Int(Rnd() * (NumberOfExercises - 1 + 1) + 1)

'Highlight selected exercise and reps
Range("A" & RandomExercise + 1 & ":" & "B" & RandomExercise + 1).Font.Bold = True
Range("A" & RandomExercise + 1 & ":" & "B" & RandomExercise + 1).Font.ColorIndex = 3

'Countdown from 20 minutes to 0
SetCountDown RandomExercise

End Sub

Sub SetCountDown(TargetCellRow As Integer)

Dim MinsRemaining As Integer
Dim iMins As Integer
MinsRemaining = 20

For iMins = MinsRemaining To 0 Step -1
    Range("C" & TargetCellRow + 1).Value = iMins & " mins"
    Application.Wait (Now + TimeValue("0:01:00"))
Next iMins

End Sub