Страницы: 1
RSS
Добавление данных из ListBox (MultiSelect) в ячейку новой строки умной таблицы
 
Доброго времени суток! Прошу помочь в решении проблемы, бьюсь с ней уже больше двух недель, решения так и не нашел на просторах форумов..В VBA не очень силен.
Данные в умную таблицу вносятся через форму (TextBox/ComboBox/ListBox2). При нажатии кнопки Добавить, в умную таблицу добавляется новая строка на которую вносятся данные с элементов формы в конкретные ячейки новой строки (в соответствии с прописанными тэгами в элементе формы). Добавление работает со всеми элементами формы, кроме ListBox2 (MultiSelect) "Исполнители", застрял именно на нем (Значения в который попадают из ListBox1). Значения из ListBox2 должны попадать в одну ячейку столбца "Исполнители" новой строки (если выбрано несколько значений, то все они должны быть в одной ячейке с новой строки)
файл с примером прилагаю. Помогите плз!!
Изменено: Express.17 - 28.02.2022 06:33:42 (Замена файла)
 
Никто не знает?
 
Express.17, определите выделенные элементы, сцепите в строку и вставляйте — в чём проблема из этого?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
сцепите в строку и вставляйте
Именно в этом проблема, сцепить все из listbox2 и вставить нужную ячейку. Не так силен в vba.
В коде вроде всё написал, но почему то не работает. Подскажите пожалуйста, если знаете
 
Знающие люди, помогите!
Без этой последней детали теряется смысл всей работы)
 
Как написали, так и работает
С какого перепуга в блоке
Код
If strTagArray(2) = "UnifiedToRecord" Then 'Вносим значения в таблицу из некомбинируемых элементов с тэгом "UnifiedToRecord"
ElseIf strTagArray(2) = "UnifiedToRecord" And objControlChecked.Name = "ListBox2" Then 'Если это ListBox2

второе условие не то, чтобы выполняться, а просто проверяться должно?

PS вы для каких врагов код так запутали?  :)
Изменено: RAN - 27.02.2022 11:17:29
 
Цитата
RAN написал:
второе условие не то, чтобы выполняться, а просто проверяться должно?
мне теперь кажется, что оно вообще не нужно. Добавил его, т.к. думал, что оно необходимо для перенесения данных из ЛБ2..
Но что с ним, что без него - ничего не выходит. Задумывалось так, если условие выполняется
Код
ElseIf strTagArray(2) = "UnifiedToRecord" And objControlChecked.Name = "ListBox2" Then

тогда входим в цикл, ищем выделенные элементы, вносим в переменную, после чего вносим эти данные в ячейку столбца "ИСПОЛНИТЕЛИ"
Цитата
RAN написал:
PS вы для каких врагов код так запутали?  
да уже что только не делал, что только не писал, и сам себя запутал в конец))
 
Цитата
RAN написал:
PS вы для каких врагов код так запутали?  
+1. Да еще и пароль стоит, что библиотеки подключить нет возможности
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Да еще и пароль стоит, что библиотеки подключить нет возможности
Убирал пароли с книги и проекта VBA, думал больше нигде нет
Извиняюсь, сейчас точно все пароли убрал.
Изменено: Express.17 - 28.02.2022 06:33:24
 
Хелп! Работающий вариант так и не подобрал.
Дайте хоть совет, как правильно прописать работающий для данной таблицы цикл для поиска выделенных элементов, внесения в переменную, и занесения этих данных в ячейку столбца ИСПОЛНИТЕЛИ
 
Если выбросить мусор раскраски, а также отказаться от идеи использования тегов, причем с преобразованием в массив, то весь код легко читается, и правильно работает
Код
Private Sub Button_AddEvent_Click()
    Dim objControlChecked As Object
    Dim ar(5)

    For Each objControlChecked In Me.Controls    'Проходим циклом по тэгам элементов формы
        Select Case objControlChecked.Name
        Case "TextBox_Event", "ComboBox_DD", "ComboBox_MM", "ComboBox_YYYY"
            If Len(objControlChecked) = 0 Then
                MsgBox "не заполнены обязательные поля": Exit Sub
            End If
        Case "ListBox2"
            If Me.ListBox2.ListCount = 0 Then
                MsgBox "не заполнены обязательные поля": Exit Sub
            End If
        End Select
       
    Next
    ar(0) = Me.TextBox_Event.Text
    ar(1) = DateSerial(Me.ComboBox_YYYY.Value, Me.ComboBox_MM.Value, Me.ComboBox_DD.Value)
    For i = 0 To Me.ListBox2.ListCount - 1
        If Me.ListBox2.Selected(i) Then s = s & vbNewLine & Me.ListBox2.List(i)
    Next i
    ar(2) = s
    ar(5) = Me.TextBox_Comment.Text

    With Sheets(1)
        .Cells(.ListObjects(1).ListRows.Count + .ListObjects(1).Range.Row + 1, 2).Resize(, 6).Value = ar
    End With


    '    Если данные внесены, предлагаем добавить следующую запись, либо закрываем форму и обновляем таблицу
    If MsgBox("Добавить еще мероприятие?", vbYesNo) = vbYes And vbNo Then
        If vbYes Then Call Button_Clear_Click
    ElseIf vbNo Then Unload Me
        Call Сортировка_План
    End If
    Application.CutCopyMode = True
End Sub
Изменено: RAN - 04.03.2022 17:49:39
 
RAN, Всё работает, огромнейшее спасибо!!!!
Но есть один нюанс, первой строкой в ячейке столбца "Исполнители" всегда добавляется пустое значение (вне зависимости от количества добавленных данных в ListBox2)
 
Цитата
Express.17 написал:
один нюанс, первой строкой в ячейке столбца "Исполнители" всегда добавляется пустое значение
добавьте что-то типа
Код
s=Mid(s, 2)
 
Цитата
RAN написал:
добавьте что-то типа
Код
s=Mid(s, 2)
Добавил, и еще
Код
vbNewLine
заменить на
Код
chr(10)
и всё заработало как надо!!
Еще раз большое спасибо за помощь! :)
Страницы: 1
Наверх