Логика, показывающая, сколько раз выбрана кнопка - PullRequest
0 голосов
/ 11 апреля 2019

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

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

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Вы используете элементы управления формой, которые имеют преимущество, заключающееся в том, что вы можете указывать все из них на один и тот же 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
1 голос
/ 11 апреля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...