Форма пользователя Excel (VBA) — Как добавить значение в общую сумму, если установлен флажок

#vba #checkbox #userform #excel-2016

Вопрос:

У меня есть несколько флажков (от 1 до 8) в форме пользователя (VBA), и их значения указаны в Ride.Подпись (от 1 до 8). Если я установлю какой-либо флажок, то его значение, указанное в Поездке, должно добавить общее значение, а если я сниму какой-либо флажок, то это значение должно вычесть из общего значения

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

 Private Sub TotalValue_Click()
Dim X As Double
X = 0
If Len(Ride1.Caption) > 0 Then X = X   Ride1.Caption
If Len(Ride2.Caption) > 0 Then X = X   Ride2.Caption
If Len(Ride3.Caption) > 0 Then X = X   Ride3.Caption
If Len(Ride4.Caption) > 0 Then X = X   Ride4.Caption
If Len(Ride5.Caption) > 0 Then X = X   Ride5.Caption
If Len(Ride6.Caption) > 0 Then X = X   Ride6.Caption
If Len(Ride7.Caption) > 0 Then X = X   Ride7.Caption
If Len(Ride8.Caption) > 0 Then X = X   Ride8.Caption
TotalValue.Caption = X
End Sub
 

https://ibb.co/7jh7mJh

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

1. Ну, вам нужно проверить, является ли значение флажка = true. Вы можете добавить это в качестве and параметра в свои операторы if или заменить проверки длины флажком. На самом деле вам нужно только If Checkbox1 Then ...

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

3. Мне просто любопытно, почему вы проверяете Len(Ride1.Caption) > 0

4. Дорогая, я мало что знаю о кодировании. Я просто использовал его, и он работает, если есть какой-либо другой метод, пожалуйста, поделитесь

5. Я загрузил скриншот своей работы, чтобы лучше понять. Это даст вам четкое представление о кодировании того, что здесь будет работать

Ответ №1:

Я устанавливаю любой флажок, затем его значение, указанное в Поездке, должно добавить общее значение, и если я сниму какой-либо флажок, то значение должно вычитаться из общего значения

Вы можете обрабатывать все свои флажки в цикле. Также вам не нужно отчислять. Просто пересчитайте.

Это то, что вы пытаетесь сделать?

 Private Sub CommandButton1_Click()
    Dim TotalSum As Double
    Dim i As Long
    
    For i = 1 To 8
        If Controls("Ride" amp; i).Value = True Then
            TotalSum = TotalSum   Val(Controls("CheckBox" amp; i).Caption)
        End If
    Next i
    
    TotalValue.Caption = TotalSum
End Sub
 

Ответ №2:

Это то, что ты пытаешься сделать? Я сделал это в цикле, так как это чище и проще в обращении.

Вам нужно изменить «Флажок» на то, как называются ваши флажки.

 Private Sub TotalValue_Click()

Dim X As Double, i As Integer

X = 0
For i = 1 To 8
    If Me.Controls("CheckBox" amp; i).Value = True  And Len(Me.Controls("Ride" amp; i).Caption) > 0 Then 
        X = X   Me.Controls("Ride" amp; i).Caption
    End If
Next i
TotalValue.Caption = X

End Sub
 

В качестве альтернативы, если вы хотите, чтобы ваш итог обновлялся всякий раз, когда кто-то проверяет/снимает флажок, вы можете добавить событие изменения для каждого из ваших текстовых полей, например:

 Private Sub CheckBox1_Change()

If Me.CheckBox1.Value = True Then
    Me.TotalValue.Caption = Me.TotalValue.Caption   Val(Me.Ride1.Caption)
Else
    Me.TotalValue.Caption = Me.TotalValue.Caption - Val(Me.Ride1.Caption)
End If

End Sub
 

Опять же, просто измените «Флажок 1» на соответствующее имя флажка.

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

1. Спасибо. Наконец-то, теперь это работает. У меня есть еще одна проблема. Я использую эту форму пользователя несколько раз на разных листах Excel. Но, если я установлю флажок в Первой форме пользователя, то другая форма пользователя автоматически установит тот же флажок. Как я могу их разделить? Я хочу установить флажок в каждой форме пользователя в соответствии с требованиями. возможно ли это? или мне нужно создать несколько пользовательских форм с одним и тем же контентом

2. Вы имеете в виду несколько рабочих тетрадей? Я не слишком уверен, в чем именно заключается ваша проблема. Я не могу сказать, что у меня это было раньше. Помимо, возможно, попытки явно указать имя книги и имя формы пользователя вместо использования Me . В противном случае я не слишком уверен без дополнительной информации.

3. Я сделал это кодирование. Спасибо вам за заботу