#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
Комментарии:
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. Я сделал это кодирование. Спасибо вам за заботу