주어진 수의 간단한 산술 질문을 요청할 VBA를 사용하여 매크로를 작성하려고합니다. 각 질문은 지정된 시간 동안 만 사용할 수 있습니다.시간 - 압력 산술에 대한 VBA 매크로
게임의 매개 변수를 설정할 수있는 워크 시트 (예 : 20 개의 질문에 각각 12 개의 질문이 있음)를 지정하고 12 초마다 입력 상자를 계속해서 버리는 이동 버튼을 클릭합니다 20 개의 질문 쿼터에 도달 할 때까지 12 초 동안 또는 이전에 "다음"또는 "확인"을 클릭 할 때 이전 질문을 삭제하고, 답변과 시간을 기록합니다.
저는 VBA에 새로운 것이지만 대부분이 사이트를 사용하여 많은 발전을 이루었습니다.
은 지금까지 나는 나에게 대답을 질문을 생성하고 기록 할 수 있도록 다음과 같습니다
Sub Rand_Arith()
Dim practice As Workbook
Dim answers As Worksheet
Dim start As Worksheet
Set practice = ActiveWorkbook
Set answers = Sheets("answers")
Set start = Sheets("Start")
Dim x As Variant
Dim a As Variant
Dim b As Variant
Dim answer As Variant
Dim myanswer As Variant
Dim i As Integer
Dim correct As Integer
Dim qs As Integer 'the number of questions we want
Dim spq As Integer 'time in seconds per question
Dim totaltime As Integer
Dim operator As String
qs = start.Cells(3, 3)
spq = start.Cells(2, 3)
totaltime = spq * qs
correct = 0
If answers.Range("A1").Value = "" Then
i = answers.Range("A2").End(xlDown).Row
Else
i = 1
End If
Do Until i = qs + 1
x = Rnd
op = Int(x * 4) '0+ 1- 2* 3/
If x < 0.25 Then
a = Round(Rnd * 10, 2)
b = Round(Rnd * 10, 2)
theanswer = Round(calc(a, b, op), 2)
ElseIf x < 0.5 Then
a = Round(Rnd * 10, 2)
b = Round(Rnd * 10, 2)
theanswer = Round(calc(a, b, op), 2)
ElseIf x < 0.75 Then
a = Round(Rnd * 10, 0)
b = Round(Rnd * 10, 0)
theanswer = Round(calc(a, b, op), 1)
Else:
a = Round(Rnd * 10, 0)
b = Round(Rnd * 10, 0)
theanswer = Round(calc(a, b, op), 1)
End If
theanswer = Round(calc(a, b, op), 2)
operator = s_op(op)
myanswer = Application.InputBox("What is " & a & operator & b & " = ?")
If theanswer = myanswer Then
correct = correct + 1
End If
runningscore = correct/i
answers.Cells(i + 1, 1) = i
answers.Cells(i + 1, 2) = a
answers.Cells(i + 1, 3) = operator
answers.Cells(i + 1, 4) = b
answers.Cells(i + 1, 5) = theanswer
answers.Cells(i + 1, 6) = myanswer
answers.Cells(i + 1, 7) = runningscore
i = i + 1
Loop
End Sub
이 함수의 난이 만든 호출에 있습니다
Function calc(n1, n2, op)
If op = 0 Then calc = n1 + n2
If op = 1 Then calc = n1 - n2
If op = 2 Then calc = n1 * n2
If op = 3 Then calc = n1/n2
End Function
Function s_op(op)
If op = 0 Then s_op = "+"
If op = 1 Then s_op = "-"
If op = 2 Then s_op = "*"
If op = 3 Then s_op = "/"
End Function
내가 가지고있는 한 가지 문제는 입력 상자에 입력 한 답은 값이 같을 때도 theanswer에 의해 계산 된 실제 답변과 같은 것으로 등록되지 않은 문자열을 반환한다는 것입니다. 결과적으로 올바른 및 runnningscore 변수는 0으로 유지됩니다.
타이밍 부분을 수행하는 방법을 알아낼 수 없습니다. 코드의 https://www.youtube.com/watch?v=sbJeGG_Xv8M
첫 번째 조각 :
Sub starttimer()
Application.OnTime Now + TimeValue("00:00:01"), "nexttick"
End Sub
두 번째 조각
Sub nexttick()
Dim practice As Workbook
Dim start As Worksheet
Set practice = ActiveWorkbook
Set start = Sheets("Start")
If start.Range("c4").Value = 0 Then Exit Sub
start.Range("c4").Value = start.Range("c4").Value - TimeValue("00:00:01")
If start.Range("c4").Value <= TimeValue("00:00:05") Then
start.Shapes("TextBox 3").Fill.ForeColor.RGB = RGB(255, 0, 0)
ElseIf start.Range("c4").Value <= TimeValue("00:00:10") Then
start.Shapes("TextBox 3").Fill.ForeColor.RGB = RGB(0, 0, 255)
ElseIf start.Range("c4").Value <= TimeValue("00:00:15") Then
start.Shapes("TextBox 3").Fill.ForeColor.RGB = RGB(0, 255, 0)
End If
starttimer
End Sub
난이 비디오에서 단어를 더 많거나 적은 단어를 촬영 한 다음 카운트 다운 타이머 실험 한
마지막 :
Sub stoptimer()
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "nexttick", , False
End Sub
나는 여기서 많은 성공을 거두지 못했습니다. 나는 카운트 다운 매크로가 다른 매크로가 함께 실행되는 것을 허용하지 않는 것처럼 느낀다?
나는 또한 Application.Wait 및 Application.OnTime을 사용하여 작업을 시도했지만, 내가 원했던 것과 같은 것을 원격으로 수행하는 질문 생성기를 이미 결합한 방법을 실제로 연습 할 수는 없습니다. 할 것.
나는 이것으로 뛰어 들었을 것이고 아마도 내가 VBA로 원하는 것을 할 수 없을 것이라고 걱정한다. (또는 실제로는 매우 어렵다).
어쨌든 도움/건설적인 비판은 대단합니다!
더 나아가, 문제/기술에 대한 나의 접근 방식에 대한 더 일반적인 의견/조언을 크게 높이 실 수 있습니다! 언급했듯이, 나는 단지 시작하고 다른 언어로도 경험이 없습니다.
안녕하세요 짐, 많은 도움에 감사드립니다. 나는 아직 UserForms에 대한 경험이별로 없기 때문에 약간의 독서를하고 다른 것을 할 것입니다! 감사합니다 또한 DateDiff 함수에 대한 내가 어떻게 지금 내가 테스트 시간을 제한 할 수 있습니다 생각을 볼 수 있습니다. 또한 변수 정의는 정답을 추적하여 문제를 분류했습니다! 내가 완전히 완료했을 때 다시 체크 할 것입니다. –
안녕하세요 Jim은 datediff와 application.OnTime의 조합을 사용하여 결국이 작업을했습니다. 저기서 대답을 받아 들였습니다. 도움에 다시 한번 감사드립니다. –
안녕 데니스, 다행스럽게 들으세요! 나머지 프로젝트와 함께 행운을 빈다. –