Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 16.01.2015
Сообщений: 50
1

Операции над элементами списка

17.09.2016, 00:05. Показов 1554. Ответов 8
Метки нет (Все метки)

Доброго времени суток...мне дали такое задание на подобие калькулятора, в листбоксе находятся определенные числа, во фрейме три optionbutton с подписями "сумма" , "произведение", "среднее". Суть заключается в том, что в листбоксе пользователь выбирает некоторые числа, а из фрейма операцию которая будет проделана с этими числами и результат выводится в текстбоксе...Я долго возился с программой и порядочно запутался, кто нибудь распутайте меня)))

Буду очень благодарен)))

P.S. скинуть свой файл не могу ибо здесь не читаются docm файлы поэтому текст моей программы ниже
Используются ListBox, Frame(внутри него три OptionButton), два CommandButton, TextBox, Label(просто надпись над текстбоксом, необязательно)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Private Sub CommandButton1_Click()
Dim i As Integer
Dim n As Integer
Dim Сумма As Double
Dim Произведение As Double
Dim Среднее As Double
Dim Результат As Double
' При выборе первого переключателя
If OptionButton1.Value = True Then
Сумма = 0
With ListBox1
For i = 0 To ListBox1.ListCount
If ListBox1.Selected(i) = True Then
Сумма = Сумма + ListBox1.List(i)
End If
Next i
End With
Результат = Сумма
End If
' При выборе второго переключателя
If OptionButton2.Value = True Then
Произведение = 1
With ListBox1
For i = 0 To ListBox1.ListCount
If ListBox1.Selected(i) = True Then
Произведение = Произведение * ListBox1.List(i)
End If
Next i
End With
Результат = Произведение
End If
' При выборе третьего переключателя
If OptionButton3.Value = True Then
Среднее = 0
n = 0
With ListBox1
For i = 0 To ListBox1.ListCount
If ListBox1.Selected(i) = True Then
n = n + 1
 
Среднее = Среднее + ListBox1.List(i)
End If
Next i
End With
Результат = Среднее / n
End If
' Вывод результата
TextBox1.Text = CStr(Format(Результат, "Fixed"))
End Sub
 
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
 
Private Sub UserForm_Initialize()
With ListBoxl
ListBox.List = Array(1, 3, 4, 5, 6, 7, 8, 10)
Listlndex = 0 'Начальный индекс массива
MultiSelect = fmMultiSelectMulti
End With
 
TextBox1.Enabled = False
CommandButton2.Cancel = True
UserForm1.Caption = "Операции над элементами списка"
UserForm1.Show
End Sub
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2016, 00:05
Ответы с готовыми решениями:

Операции над элементами списка
Написать программу, которая будет при запуске приложения выдавать форму «Операции над элементами...

Реализовать операции над элементами списка в отдельной форме
Помогите, пожалуйста: Разработать приложение, которое позволит выбрать несколько чисел, выводимых...

Операции над элементами списка: сумма, произведение или среднее
Нужно установить переключателс: сумма, произведение или среднее, указать какая операция будет...

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

8
1966 / 1344 / 630
Регистрация: 23.03.2015
Сообщений: 4,387
17.09.2016, 04:32 2
Ronin94,
Попробуйте заменить код Private Sub CommandButton1_Click на это:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim Сумма As Double
Dim Произведение As Double
Dim Среднее As Double
Dim Результат As Double
 
Сумма = 0
Произведение = 1
For i = 0 To ListBox1.ListCount - 1
Сумма = Сумма + CInt(ListBox1.List(i))
Произведение = Произведение * CInt(ListBox1.List(i))
Next i
Среднее = Round(Сумма / i, 2)
If OptionButton1.Value Then Результат = Сумма
If OptionButton2.Value Then Результат = Произведение
If OptionButton3.Value Then Результат = Произведение
TextBox1.Text = CStr(Результат)
Добавлено через 2 минуты
Sorry Cтрочка 15 If OptionButton3.Value Then Результат = Среднее
0
5 / 5 / 5
Регистрация: 03.03.2011
Сообщений: 43
18.09.2016, 03:02 3
Цитата Сообщение от Narimanych Посмотреть сообщение
Ronin94,
Попробуйте заменить код Private Sub CommandButton1_Click на это:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim Сумма As Double
Dim Произведение As Double
Dim Среднее As Double
Dim Результат As Double
 
Сумма = 0
Произведение = 1
For i = 0 To ListBox1.ListCount - 1
Сумма = Сумма + CInt(ListBox1.List(i))
Произведение = Произведение * CInt(ListBox1.List(i))
Next i
Среднее = Round(Сумма / i, 2)
If OptionButton1.Value Then Результат = Сумма
If OptionButton2.Value Then Результат = Произведение
If OptionButton3.Value Then Результат = Произведение
TextBox1.Text = CStr(Результат)
Добавлено через 2 минуты
Sorry Cтрочка 15 If OptionButton3.Value Then Результат = Среднее
Вы не заметили, что в исходном варианте считались не все элементы, а по условию "If ListBox1.Selected(i) Then ". То есть его нужно добавить в начало строк 9 и 10, а так же определить, например дополнительным счётчиком, количество обработанных значений для определения среднего.

Добавлено через 15 минут
Ronin94, пользуясь случаем, несколько советов по Вашему коду.
Раз Вы использовали With ListBox1, то внутри него следовало использовать короткую запись: не ListBox1.ListCount, а .ListCount и так далее.
If на одно действие можно писать в одну строку - так будет читабельнее, а, как я догадываюсь, за количество строк вам пока не платят.
Сравнивать в условии булево значение с true или false - не нужно. То есть вместо "if ListBox1.Selected(i) = True then" тот же результат получим использовав "if ListBox1.Selected(i) then".
UserForm1.Hide - лучше не указывать имя, а использовать Me.Hide, потому что если эта форма будет переименована, но появится новая форма с именем UserForm1, то кнопка будет пытаться закрыть именно ту новую форму.
0
1966 / 1344 / 630
Регистрация: 23.03.2015
Сообщений: 4,387
18.09.2016, 03:10 4
Joremar,
Ну добавьте еще про строчку № 58...
0
2 / 2 / 0
Регистрация: 16.01.2015
Сообщений: 50
19.09.2016, 14:15  [ТС] 5
выдает Object required '424'
0
1966 / 1344 / 630
Регистрация: 23.03.2015
Сообщений: 4,387
19.09.2016, 15:06 6
Лучший ответ Сообщение было отмечено Ronin94 как решение

Решение

Ronin94,

Посмотрите прикрепленный файл

Joremar,
Ваше замечание
Цитата Сообщение от Joremar Посмотреть сообщение
Вы не заметили, что в исходном варианте считались не все элементы, а по условию "If ListBox1.Selected(i) Then
учтено.
Спасибо
0
Вложения
Тип файла: rar For Roninn94.rar (15.8 Кб, 7 просмотров)
5 / 5 / 5
Регистрация: 03.03.2011
Сообщений: 43
19.09.2016, 15:18 7
Добавлю, что проблемы была из-за того, что вместо буквы l у вас попадались единицы, а вместо единиц - буква l.
0
5440 / 1475 / 359
Регистрация: 23.12.2010
Сообщений: 2,206
Записей в блоге: 1
19.09.2016, 15:28 8
Цитата Сообщение от Ronin94 Посмотреть сообщение
Я долго возился с программой и порядочно запутался, кто нибудь распутайте меня)))
А так же l (L) вместо I (i) в ListIndex
Но это ни на что не повлияло, ListIndex без объекта это переменная, вместо свойства объекта.

Распутывать таких людей - пустое занятие.
0
2 / 2 / 0
Регистрация: 16.01.2015
Сообщений: 50
19.09.2016, 16:48  [ТС] 9
Narimanych, спасибо большое))))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2016, 16:48

Операции над матрицами: как перейти к строке отрицательного элемента
Требуется: Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с...

Операции над .doc и .txt файлами: работа с форматированным текстом
Доброго всем времени! Небольшое лирическое вступление, т.к. не знаю как нормально начать. ...

Операции над элементами списка
Доброго времени суток...мне дали такое задание на подобие калькулятора, в листбоксе находятся...

Операции над элементами множества
Добрый день! Помогите пожалуйста с небольшой задачкой. Мне необходимо написать текст модуля ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.