Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
1

Перенос данных и подсчет из listbox в listbox

13.04.2017, 02:31. Показов 3357. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, столкнулся задачей которую необходимо сделать в ексельке с VBA .
Если таблица из 6 столбиков в которой указаны данные (на фото будет видно).
У меня получилось сделать форму и запихнуть туда поисковую строку которая ищет по данные по одному из столбцов.
Проблема состоит в том что я хочу путем выделения нужной строки, типа (заправка или восстановление) и количества, перенести данные из листбокса1 в листбокс2 и вывести результат суммы работы в лейбл.
Как мне осуществить перенос данных?

На данный момент поиск реализован вот так
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
Private Sub CommandButton1_Click()
Unload Me
End Sub
 
Private Sub CommandButton2_Click()
Dim RW As Long
    RW = ListBox1.List(ListBox1.ListIndex, 0)
    
End Sub
 
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim RW As Long
    RW = ListBox1.List(ListBox1.ListIndex, 0)
    ThisWorkbook.Worksheets("Лист3").Activate
    ActiveSheet.Range(Cells(RW, 1), Cells(RW, 6)).Select
    End Sub
 
 
 
Private Sub OptionButton1_Click()
 
End Sub
 
Private Sub tbName_Change()
Dim LastRow As Long, i As Long, x As Long, Arr()
    Me.ListBox1.Clear
    With Sheets("Лист3")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        Arr = .Range(.Cells(2, 1), .Cells(LastRow, 6)).Value
    End With
    With ListBox1
        For i = 1 To UBound(Arr)
            If UCase(Arr(i, 2)) Like UCase(Me.tbName) & "*" Then
                .AddItem ""
                .List(x, 0) = i + 1
                .List(x, 1) = Arr(i, 1)
                .List(x, 2) = Arr(i, 2)
                .List(x, 3) = Arr(i, 3)
                .List(x, 4) = Arr(i, 4)
                .List(x, 5) = Arr(i, 5)
                .List(x, 6) = Arr(i, 6)
            
                x = x + 1
 
            End If
        Next
   End With
End Sub
Миниатюры
Перенос данных и подсчет из listbox в listbox  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2017, 02:31
Ответы с готовыми решениями:

Перенос данных из ListBox формы1 в ListBox формы 2
как перенести заполненный листбокс из одной формы в новый лист бокс новой формы?

Перенос данных между listbox 1 и listbox 2
В общем, столкнулся с такой проблемой. Программа по заданию должна переместить одно выбранное...

Перенос данных с Listbox в 2 listbox
НА форме 2 Listbox В listbox1 информация записана примерно следующим образом: При нажатии на...

Перенос Items из Listbox 1-ой формы в Listbox 2-ой. Сохранение изменений
Добрый день, изучаю C#, пользуюсь Visual Studio 2015, Windows Forms. Проблема такова: На первой...

16
141 / 124 / 50
Регистрация: 10.11.2011
Сообщений: 622
13.04.2017, 06:26 2
Файл приложите ,а не картинку.
0
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 12:44  [ТС] 3
К сожалению файл не прикладывается (( не знаю почему формат .xlsm не поддерживается
залил на яд
Кликните здесь для просмотра всего текста
https://yadi.sk/d/4YYVpSLY3GvhNz
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
13.04.2017, 12:57 4
В архив, а потом прикрепить.
0
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 13:00  [ТС] 5
вот
Вложения
Тип файла: rar ТипаПрайс.rar (37.3 Кб, 14 просмотров)
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
13.04.2017, 13:49 6
запись только одна или несколько заносится во второй листбокс?
0
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 15:50  [ТС] 7
Грубо говоря хочу чтобы выбрать одну строку - добавил в листбокс2
Потом выбрал другую строку и тоже добавил.
При этом выделяю. что по этой строке сделать надо с помощью optionButton и он заносит в лист бокс именно с этой позицией
Пример в листбоксе2:
HP LaserJet P4010 CC364A 10000 1010 (заправка)
HP LaserJet 1010 Q2612A 2000 430 (заправка)
Canon FAX-L140 Canon FX-10 2000 660 (восстановление)

И справа в сумме выводилось бы 2100

Добавлено через 31 минуту
Сейчас нашел примерно такую реализацию переноса =) надеюсь допилить до желаемого
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton2_Click()
    
    If ListBox1.ListIndex > -1 Then
       ListBox2.AddItem ListBox1.Value
       ListBox2.List(ListBox2.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
       ListBox2.List(ListBox2.ListCount - 1, 2) = ListBox1.List(ListBox1.ListIndex, 2)
       ListBox2.List(ListBox2.ListCount - 1, 3) = ListBox1.List(ListBox1.ListIndex, 3)
       ListBox2.List(ListBox2.ListCount - 1, 4) = ListBox1.List(ListBox1.ListIndex, 4)
       
    End If
 
End Sub
Добавлено через 10 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub CommandButton2_Click()
    
    If ListBox1.ListIndex > -1 Then
       ListBox2.AddItem ListBox1.Value
       ListBox2.List(ListBox2.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
       ListBox2.List(ListBox2.ListCount - 1, 2) = ListBox1.List(ListBox1.ListIndex, 2)
       ListBox2.List(ListBox2.ListCount - 1, 3) = ListBox1.List(ListBox1.ListIndex, 3)
       ListBox2.List(ListBox2.ListCount - 1, 4) = ListBox1.List(ListBox1.ListIndex, 4)
    
      If OptionButton1 = True Then
       ListBox2.List(ListBox2.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 5)
       ListBox2.List(ListBox2.ListCount - 1, 6) = OptionButton1.Caption
       
    Else
       ListBox2.List(ListBox2.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 6)
       ListBox2.List(ListBox2.ListCount - 1, 6) = OptionButton2.Caption
      End If
      
    End If
 
End Sub
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
13.04.2017, 16:09 8
у вас нет проверки если оба OptionButton пусты.
1
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 16:25  [ТС] 9
я сделал просто активным первый сразу
Visual Basic
1
2
3
Private Sub UserForm_Activate()
    OptionButton1.Value = 1
End Sub
Но возникла проблема как посчитать сумму тех кто добавил.
Попробовал объявить переменную глобальную
Visual Basic
1
Public istt As Integer
прямо перед всем кодом (не знаю верно ли это)
и дописал в условие
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
   If OptionButton1 = True Then
       ListBox2.List(ListBox2.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 5)
       istt = istt +  ListBox1.List(ListBox1.ListIndex, 5)
       ListBox2.List(ListBox2.ListCount - 1, 6) = OptionButton1.Caption
       
    Else
       ListBox2.List(ListBox2.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 6)
       istt = istt +  ListBox1.List(ListBox1.ListIndex, 6)
       ListBox2.List(ListBox2.ListCount - 1, 6) = OptionButton2.Caption
      End If
 
    Sum.Caption = istt
    End If

Но он выдает только значения строк но не суммирует их. Где ошибка?
0
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 16:27  [ТС] 10
вот файлик
Вложения
Тип файла: rar ТипаПрайс.rar (36.9 Кб, 34 просмотров)
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
13.04.2017, 16:40 11
Лучший ответ Сообщение было отмечено kyzavr как решение

Решение

мой вариант
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton2_Click()
Dim lbr1 As Long, lbr2#
    lbr1 = ListBox1.ListIndex
    lbr2 = Val(ListBox2.ListCount / 4)
'проверяем OptionButton на заполнение
'If (OptionButton1.Value + OptionButton2.Value) = 0 Then MsgBox "Выберете Заправка или Восстановление": Exit Sub
 
For i = 1 To 4
   ListBox2.AddItem ""
   ListBox2.List(lbr2, i - 1) = ListBox1.List(lbr1, i)
Next
 
ListBox2.List(lbr2, 5) = IIf(OptionButton1.Value, OptionButton1.Caption, OptionButton2.Caption)
ListBox2.List(lbr2, 4) = ListBox1.List(lbr1, IIf(OptionButton1.Value, 5, 6))
Sum = Sum + ListBox2.List(lbr2, 4)
Me.Label9.Caption = Sum
 
End Sub
в модуль в самом верху пишем
Visual Basic
1
public sum#
1
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 16:47  [ТС] 12
Спасибо, сейчас попробую, а в модуль это куда)? на фото)? я просто не совсем еще понимаю как тут что))
Миниатюры
Перенос данных и подсчет из listbox в listbox  
0
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 16:55  [ТС] 13
Добавил
Visual Basic
1
public sum#
в модуль ЭтаКнига (надеюсь правильно)
но способ почему то тоже не суммирует а выдает последнее значение
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
13.04.2017, 17:09 14
не туда вставили. двойной клик по Module1 (на картинке слева) откроется окно, там висит код открытия формы, вот туда и вставляем.
1
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 17:19  [ТС] 15
Ааа понял спасибо, это как бы макросы+) у меня там просто вызов кнопки висел
Visual Basic
1
2
3
Sub Кнопка1_Щелчок()
UserForm1.Show
End Sub
Создал второй модуль)

Теперь и мой вариантик сработал =) Правда совсем забыл добавить куда-нибудь значение из количества =)
0
3911 / 2311 / 782
Регистрация: 02.11.2012
Сообщений: 6,147
13.04.2017, 17:33 16
Цитата Сообщение от kyzavr Посмотреть сообщение
Создал второй модуль)
не обязательно. можно было в том же добавить. Не плодите модули без надобности.
1
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
13.04.2017, 23:02  [ТС] 17
Да я уже это понял, добавлял в конец, а надо было в топ.
Единственный вопрос, который остался, как удалять из листбокс2 ненужную строку? (естественно по кнопке и чтобы из суммы вычиталось)

Добавлено через 2 часа 9 минут
Что-то строка удаляется, но значение которое я хочу вычесть из суммы берется по последнему элементу в таблице =)
Подскажет кто-нибудь в чем тут подвох этих выборов?
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub CommandButton4_Click()
If ListBox2.ListIndex > -1 Then
       ListBox2.RemoveItem ListBox2.ListIndex
       
       sum = sum - (ListBox2.List(ListBox2.ListIndex, 5) * ListBox2.List(ListBox2.ListIndex, 6))
       Suma.Caption = sum
End If
 
End Sub
Добавлено через 32 минуты
Нашел другой пример, но у меня если начать удалять последнюю строку - удаляет сразу все. И что-то не цепляет значение из столбика чтобы вычесть его из суммы =) ХЕЛП =)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton4_Click()
       Dim x As Long
    With ListBox2
        For i = .ListCount - 1 To 0 Step -1
            Debug.Print .List(i, 0)
            If .Selected(i) = True Then
              sum = sum - (.List(i, 5) * .List(i, 6))
                .RemoveItem (i)
                x = x + 1
                
            
            End If
        Next
    End With
    If x = 0 Then MsgBox "Не выбрано ни одной позиции.", 48, "Ошибка!"
       
 
End Sub
Добавлено через 1 час 54 минуты
Решено =)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton4_Click()
Dim i As Integer, iRow As Long
    For i = 0 To Me.ListBox2.ListCount
        If Me.ListBox2.Selected(i) = True Then
            sum = sum - (Me.ListBox2.List(ListBox2.ListIndex, 5) * Me.ListBox2.List(ListBox2.ListIndex, 6))
            Me.ListBox2.RemoveItem i
            Exit For
        End If
    Next
   Suma.Caption = sum
 
End Sub
Но возник вопрос, как сделать чтобы в строке поиска поиск был не по совпадению по одному столбику а по двум? например мне нужно и по названию принтера и по картриджу

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
Private Sub tbName_Change()
Dim LastRow As Long, i As Long, x As Long, Arr()
    Me.ListBox1.Clear
    With Sheets("Ëèñò3")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        Arr = .Range(.Cells(2, 1), .Cells(LastRow, 6)).Value
    End With
    With ListBox1
        For i = 1 To UBound(Arr)
            If UCase(Arr(i, 2)) Like UCase(Me.tbName) & "*" Then
                .AddItem ""
                .List(x, 0) = i + 1
                .List(x, 1) = Arr(i, 1)
                .List(x, 2) = Arr(i, 2)
                .List(x, 3) = Arr(i, 3)
                .List(x, 4) = Arr(i, 4)
                .List(x, 5) = Arr(i, 5)
                .List(x, 6) = Arr(i, 6)
            
                x = x + 1
 
            End If
        Next
   End With
End Sub
0
13.04.2017, 23:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2017, 23:02
Помогаю со студенческими работами здесь

Многострочный listbox (или перенос строки в listbox)
Здравствуйте) нужно сделать вот что.. Есть listbox определенного размера и определенного цвета под...

Перенос данных из Excel в ListBox
Есть Excel файл, необходимо из него данные перенести в listBox.Ещё в listBox'e имеются и другие...

Перенос данных из Edit в ListBox
Друзья помогите. Проблема в следующем. Есть два компонента Edit.Нужно их числовые значения...

Перенос данных с одного ListBox в другой
создать программку которая переносит с одного listbox где написаны фамилии и оценки при нажатии на...

Перенос данных из одного ListBox в другой без каких либо изменений
Подскажите как при нажатии на CommandButton1 переносить данные из одного ListBox в другой без каких...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru