Страницы: 1
RSS
Вывод записи из ListBox в ячейку Excel
 
Добрый день форумчане.

Пробую решить следующую задачу.

Имеется форма для ввода информации. В форме произвожу формирование заказа, который записываю в ListBox, также расположенный на этой же форме.
После того, как заказ собран, нажатием на кнопку "Сформировать заказ" произвожу запись заказа из ListBox на лист Baza.

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

Прошу взглянуть на код, и подсказать что я делаю не правильно и как сделать корректно. (пример приложен)
 
With Sheets("Baza").Range("Baza")
Код
 With Sheets("Baza")

С заказом непонятно
Код
If Me.lbTabZakaz.Selected(i) Then

После формирования Вы еще выделяете нужную строку? Зачем тогда все остальное, что записано в заказ?
 
Добрый день.
Насколько я понял 1 вопрос - он в том, что не записывается номер заказа? Если это так, то это происходит потому, что
Код
        With Sheets("Baza").Range("Baza")
        
        iLastRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
        
        .Cells(iLastRow, 2) = Date & " , " & Time
        .Cells(iLastRow, 4) = "Активный"
        .Cells(iLastRow, 5) = Me.cbTable.Value
        .Cells(iLastRow, 6) = Me.tbPeople.Value
        .Cells(iLastRow, 7) = tZakaz

    End With

В инструкциях обработки нажатия кнопки "сформировать заказ" нет инструкции заполнения 1 столбца таблицы. Заполнение идет со второго столбца.
2. При определении количества строк вы используете диапазон умной таблицы с именем "Baza". Диапазон выглядит так: $A$2:$G$2. Потом вы в этом диапазоне при помощи метода End ищете номер строки. Метод в диапазоне из одной строки возвращает 1 (и всегда будет возвращать). Вы к этому значению прибавляете 1 (получаем 2) и в этой строке пишете данные с формы. Но эти строки данных НЕ ПОПАДАЮТ в диапазон таблицы. Поэтому, когда вы формируете следующий заказ - у вас опять определяется 1 строка в умной таблице и получается 1+1=2 строка в которую будете записывать.
Вам надо не методом End пользоваться в данном случае, а использовать методы и свойства, применяемые к умным таблицам (ListObject). Например, DataBodyRange (вернет диапазон с данными (не заголовками) в умной таблице).
Кому решение нужно - тот пример и рисует.
 
vikttur, Нужную строку не выделяю. Я хочу все записи, которые есть в lbTabZakaz объединить в одну строку через ";" и потом вывести это все в .Cells(iLastRow, 7)
Но видимо что, то не так пошло.
 
Пытливый, Благодарю за разъяснения по вопросу №2.

По первому вопросу я имел введу что у меня информация из lbTabZakaz не записывается в 7 столбце таблице Baza. Может конечно и запись происходит но я не чего не вижу в таблице.
Изменено: АналитикБУ - 06.11.2019 13:15:07
 
Задачу решил.
 
АналитикБУ, тут принято делиться решениями, особенно если вас таки натолкнули на правильную мысль.
Форум же не только для вас, он для всех страждущих. Ваше решение может помочь много еще кому.
Вот горшок пустой, он предмет простой...
 
PooHkrd, без проблем  :) . Пока что до идеала не дошел, выводит немного лишних символов  в ячейке, но работает :) Буду еще улучшать
Код
 With Sheets("Baza")
        
        iLastRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
        
        .Cells(iLastRow, 2) = Date & " , " & Time
        .Cells(iLastRow, 4) = "Активный"
        .Cells(iLastRow, 5) = Me.cbTable.Value
        .Cells(iLastRow, 6) = Me.tbPeople.Value
        
        For i = 0 To Me.lbTabZakaz.ListCount - 1
               
                m = .Cells(iLastRow, 7).Value
                .Cells(iLastRow, 7).Value = "|" & m & "|" & Me.lbTabZakaz.List(i, 1)
            
        Next i

End With
Изменено: АналитикБУ - 06.11.2019 14:45:39
Страницы: 1
Наверх