Доброго времени суток! Прошу помочь в решении проблемы, бьюсь с ней уже больше двух недель, решения так и не нашел на просторах форумов..В VBA не очень силен. Данные в умную таблицу вносятся через форму (TextBox/ComboBox/ListBox2). При нажатии кнопки Добавить, в умную таблицу добавляется новая строка на которую вносятся данные с элементов формы в конкретные ячейки новой строки (в соответствии с прописанными тэгами в элементе формы). Добавление работает со всеми элементами формы, кроме ListBox2 (MultiSelect) "Исполнители", застрял именно на нем (Значения в который попадают из ListBox1). Значения из ListBox2 должны попадать в одну ячейку столбца "Исполнители" новой строки (если выбрано несколько значений, то все они должны быть в одной ячейке с новой строки) файл с примером прилагаю. Помогите плз!!
Express.17, определите выделенные элементы, сцепите в строку и вставляйте — в чём проблема из этого?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Именно в этом проблема, сцепить все из listbox2 и вставить нужную ячейку. Не так силен в vba. В коде вроде всё написал, но почему то не работает. Подскажите пожалуйста, если знаете
Как написали, так и работает С какого перепуга в блоке
Код
If strTagArray(2) = "UnifiedToRecord" Then 'Вносим значения в таблицу из некомбинируемых элементов с тэгом "UnifiedToRecord"
ElseIf strTagArray(2) = "UnifiedToRecord" And objControlChecked.Name = "ListBox2" Then 'Если это ListBox2
второе условие не то, чтобы выполняться, а просто проверяться должно?
RAN написал: второе условие не то, чтобы выполняться, а просто проверяться должно?
мне теперь кажется, что оно вообще не нужно. Добавил его, т.к. думал, что оно необходимо для перенесения данных из ЛБ2.. Но что с ним, что без него - ничего не выходит. Задумывалось так, если условие выполняется
Код
ElseIf strTagArray(2) = "UnifiedToRecord" And objControlChecked.Name = "ListBox2" Then
тогда входим в цикл, ищем выделенные элементы, вносим в переменную, после чего вносим эти данные в ячейку столбца "ИСПОЛНИТЕЛИ"
Цитата
RAN написал: PS вы для каких врагов код так запутали?
да уже что только не делал, что только не писал, и сам себя запутал в конец))
Хелп! Работающий вариант так и не подобрал. Дайте хоть совет, как правильно прописать работающий для данной таблицы цикл для поиска выделенных элементов, внесения в переменную, и занесения этих данных в ячейку столбца ИСПОЛНИТЕЛИ
Если выбросить мусор раскраски, а также отказаться от идеи использования тегов, причем с преобразованием в массив, то весь код легко читается, и правильно работает
Код
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, Всё работает, огромнейшее спасибо!!!! Но есть один нюанс, первой строкой в ячейке столбца "Исполнители" всегда добавляется пустое значение (вне зависимости от количества добавленных данных в ListBox2)