Вопрос и кнопки В настоящее время я использую excel-vba и пытаюсь создать простой вопрос и ответ. Пока у меня есть вопрос в моем листе Excel, который ответит на вышеуказанный вопрос. У меня есть четыре кнопки, которые, когда вы выбираете каждую кнопку, появится сообщение. Я хочу выяснить, могу ли я добавить некоторую логику к каждой кнопке, чтобы показать, сколько раз кнопка была выбрана, а также сколько раз был дан ответ на этот вопрос?

Я пытался исследовать это, но большинство ответов показывают в Java и Android-программировании. Нет с Excel-VBA.

Sub Tomatoes()


MsgBox "Correct"
End Sub

Sub Cucumbers()

MsgBox "Wrong Answer, that would be too healthy, Please choose again."
End Sub

Sub Lime()

MsgBox "Incorrect Answer, that ketchup would be exteremely sour."
End Sub

Sub Apples()

MsgBox "Incorrect, Apples with Ketchup would be horrible. "
End Sub

Каждая кнопка создается таким образом, что при ее выборе она отображает различные параметры. Есть ли способ добавить логику к каждой кнопке, чтобы показать, сколько раз она была выбрана? а также добавить логику, чтобы показать, сколько раз на этот вопрос был дан ответ?

0
TJunky 11 Апр 2019 в 22:18

2 ответа

Лучший ответ

Вы используете элементы управления формой, которые имеют преимущество, заключающееся в том, что вы можете указывать все из них на один и тот же Sub. Так что создайте новый саб, как этот, и укажите все свои кнопки на это. Этот саб будет увеличивать счетчики соответствующим образом на вашем Листе2. Вот как должен выглядеть Sheet2:

enter image description here

Sub btnIngredient_Click()

    Dim wb As Workbook
    Dim wsQuestion As Worksheet
    Dim wsCounts As Worksheet
    Dim rDest As Range

    Set wb = ActiveWorkbook
    Set wsQuestion = wb.ActiveSheet
    Set wsCounts = wb.Worksheets("Sheet2")

    Select Case wsQuestion.Shapes(Application.Caller).TextFrame.Characters.Text
        Case "Cucumbers":   Set rDest = wsCounts.Range("B3")
                            MsgBox "Wrong Answer, that would be too healthy, Please choose again."

        Case "Tomatoes":    Set rDest = wsCounts.Range("B4")
                            MsgBox "Correct"

        Case "Lime":        Set rDest = wsCounts.Range("B5")
                            MsgBox "Incorrect Answer, that ketchup would be exteremely sour."

        Case "Apples":      Set rDest = wsCounts.Range("B6")
                            MsgBox "Incorrect, Apples with Ketchup would be horrible. "

    End Select

    wsCounts.Range("B2").Value = wsCounts.Range("B2").Value + 1 'Increase counter of the total times question answered
    rDest.Value = rDest.Value + 1   'Increase counter of individual button clicked

End Sub

Чтобы очистить счетчики закрытия книги, используйте событие Workbook_BeforeClose (убедитесь, что этот код находится в модуле кода ThisWorkbook):

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Me.Worksheets("Sheet2").Range("B2:B6").Value = 0

End Sub
2
tigeravatar 11 Апр 2019 в 19:43

Sub для каждой кнопки может отслеживать необходимую информацию. С добавлением некоторых переменных уровня модуля ваш код может выглядеть примерно так:

Private CucumbersPressed As Integer
Private TomatoesPressed As Integer
Private QuestionAnswered As Integer

Private Sub Cucumbers()
   CucumbersPressed = CucumbersPressed + 1
   QuestionAnswered = QuestionAnswered + 1

   MsgBox "Wrong"
End Sub

Private Sub Tomatoes()
   TomatoesPressed = TomatoesPressed + 1
   QuestionAnswered = QuestionAnswered + 1

   MsgBox "Correct"
End Sub

В зависимости от количества вопросов и количества кнопок такой подход может стать громоздким. В этом случае потребуется какой-то другой механизм, но идея будет аналогичной.

1
Brian M Stafford 11 Апр 2019 в 19:32