Логика, чтобы показать, сколько раз выбирается кнопка

#excel #vba

#excel #vba

Вопрос:

Вопрос и кнопкиВ настоящее время я использую 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
  

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

Комментарии:

1. Должны ли когда-либо сбрасываться счетчики? Если да, то когда?

2. Подсчеты будут сброшены только при закрытии рабочего листа, и подсчеты будут отображаться на другом листе. Например, может быть, sheet2? чтобы показать, сколько раз была выбрана эта опция.

Ответ №1:

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

введите описание изображения здесь

 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 code):

 Private Sub Workbook_BeforeClose(Cancel As Boolean)

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

End Sub
  

Ответ №2:

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

 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
  

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