Страницы: 1
RSS
вставка в UserForm данных с отфильтрованной таблицы
 
Здравствуйте! Я снова к вам за советом.
Есть UserForm с текстбоксами и листбоксом. И есть таблица, в которой нужно  отфильтровать диапазон на основании текстбокса1 UserForm, и затем вставить полученные значения в листбокс.

Подскажите, что не так с моим макросом?
Код
Private Sub UserForm2_Initialize()

Application.ScreenUpdating = False
Dim stRow As Long
Dim strName As String
Dim t As Integer
Dim Wbb As Workbook
strName = ThisWorkbook.Path & "\приложения\база\движение.xlsb"
Set Wbb = Workbooks.Open(strName)
Me.ListBox1.Clear
stRow = Wbb.Sheets("движение").Cells(Rows.Count, 5).End(xlUp).Row
With Wbb.Sheets("движение")
    .Cells(2, 5).AutoFilter Field:=5, Criteria1:=Me.UserForm2.TextBox1
    .Select
End With
Cells = SpecialCells(xlVisible)
 t = 0
    For r = 2 To stRow
    Me.UserForm2.ListBox1.AddItem ""
    Me.UserForm2.ListBox1.List(t, 0) = Wbb.Sheets("движение").Cells(r, 2).Value
    Me.UserForm2.ListBox1.List(t, 1) = Wbb.Sheets("движение").Cells(r, 8).Value
    Me.UserForm2.ListBox1.List(t, 2) = Wbb.Sheets("движение").Cells(r, 9).Value
    Me.UserForm2.ListBox1.List(t, 3) = Wbb.Sheets("движение").Cells(r, 10).Value
    Me.UserForm2.ListBox1.List(t, 4) = Wbb.Sheets("движение").Cells(r, 11).Value
    Me.UserForm2.ListBox1.List(t, 5) = Wbb.Sheets("движение").Cells(r, 15).Value
    Me.UserForm2.ListBox1.List(t, 6) = Wbb.Sheets("движение").Cells(r, 16).Value
    Me.UserForm2.ListBox1.List(t, 7) = Wbb.Sheets("движение").Cells(r, 17).Value
    
     t = t + 1
    Next
    Windows("движение").Close False
    Application.ScreenUpdating = True
End Sub
Изменено: ALANA - 03.03.2017 00:05:50
 
Код
For r = 2 To stRow
Где Вы вычисляете stRow?
Согласие есть продукт при полном непротивлении сторон
 
я ошиблась немного в коде
LastRow = Wbb.Sheets("движение").Cells(Rows.Count, 5).End(xlUp).Row

но исправив ошибку не помогает все равно
 
Цитата
ALANA написал: не помогает
А что должно быть в итоге?
Цитата
ALANA написал: что не так с моим макросом?
По синтаксису вроде явных ошибок нет, по логике - Вам виднее. Какой ответ Вы ожидаете?
Согласие есть продукт при полном непротивлении сторон
 
есть две формы. В одной - прайс лист, при двойном клике на названии в первой форме - появляется вторая форма, в которой указано движение детали..(приход, расход, кем, когда, сколько)

первая форма работает отлично, при двойном клике появляется вторая форма, в текстбоксе - название детали, а дальше.на этом все и заканчивается - все остальное - пусто

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

но я добавляла при инициализации строку - Me.UserForm2.TextBox1 = Workbooks("программа").Sheets("главная").Cells(1, 23)
не помогло, в итоге сейчас в свойствах самого текстбокса выставлена конкретная ячейка из которой он и берет название
Изменено: ALANA - 03.03.2017 00:32:25
 
Очень ценная информация. ВОПРОС в чем?
Согласие есть продукт при полном непротивлении сторон
 
а вопрос в том, что вторая форма не работает( не заполняется :(
 
Cells = SpecialCells(xlVisible) вот на эту строку  выдает - "sub or function not defined"
 
Цитата
Sanja написал: вроде явных ошибок нет
Погорячился
Код
    Set myCells = Cells.SpecialCells(xlCellTypeVisible)
Настоятельный совет - избегайте использовать в качестве имен переменных зарезервированные слова (Cells например). Это не ошибка, но очень большая вероятность возникновения ошибки
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо Вам большое за помощь) проблеск уже есть, уже открывает и сортирует ту таблицу, теперь заминка на вставке, но это уже завтра буду разбираться)
 
Все получилось, теперь вставляет в форму  при нажатии кнопки"добавить", но теперь новая проблема -  при автофильтре в форму добавляет все нужные и ненужные данные... т.е. подхватывает с таблицы  все ячейки что выше выбранной позиции.  
В примере я удалила с книг все, оставив только то, что нужно - кнопка в первой книге, и 2 таблицы во второй, из которой формы берут данные.
В примере это можно проверить выбрав "датчик ПРП..."
Помогите мне пожалуйста со второй формой .
Код
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Me.ListBox1.Clear
Dim Wb As Workbook
Set Wb = Workbooks.Open(ThisWorkbook.Path & "\расход.xlsb")
With Wb.Sheets("расход")

    .Cells(2, 5).AutoFilter Field:=5, Criteria1:=Me.TextBox1
    .Select
End With
stRow = Wb.Sheets("расход").Cells(Rows.Count, 5).End(xlUp).Row
Set myCells = Cells.SpecialCells(xlCellTypeVisible)

 t = 0
    For r = 3 To stRow
    Me.ListBox1.AddItem ""
    Me.ListBox1.List(t, 0) = Wb.Sheets("расход").Cells(r, 2).Value
    Me.ListBox1.List(t, 1) = Wb.Sheets("расход").Cells(r, 8).Value
    Me.ListBox1.List(t, 2) = Wb.Sheets("расход").Cells(r, 9).Value
    Me.ListBox1.List(t, 3) = Wb.Sheets("расход").Cells(r, 10).Value
    Me.ListBox1.List(t, 4) = Wb.Sheets("расход").Cells(r, 11).Value
    Me.ListBox1.List(t, 5) = Wb.Sheets("расход").Cells(r, 15).Value
    Me.ListBox1.List(t, 6) = Wb.Sheets("расход").Cells(r, 16).Value
    Me.ListBox1.List(t, 7) = Wb.Sheets("расход").Cells(r, 17).Value
     t = t + 1
Next
With Wb.Sheets("прайс")
    .Cells(2, 5).AutoFilter Field:=5, Criteria1:=Me.TextBox1
    .Select
End With
stRow = Wb.Sheets("прайс").Cells(Rows.Count, 5).End(xlUp).Row
Set myCells = Cells.SpecialCells(xlCellTypeVisible)
 myCells.Select
 For r = 3 To stRow
Me.TextBox2.Text = Wb.Sheets("прайс").Cells(r, 2).Value
Me.TextBox3.Text = Wb.Sheets("прайс").Cells(r, 7).Value
Next
Windows("расход").Close False
ListBox1.ColumnWidths = "65;125;65;65;65;65;65;65"
Application.ScreenUpdating = True
End Sub
Изменено: ALANA - 03.03.2017 16:09:20
 
Я еще подработала код, он стал понятней, но фильтрация все равно проходит не правильно. Как и писала в прошлом посте - при автофильтре добавляет в форму кроме выбранной позиции и те, что расположены выше. Что не так с фильтрацией? подскажите плиззззз
Код
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Me.ListBox1.Clear
Dim Wb As Workbook
Set Wb = Workbooks.Open(ThisWorkbook.Path & "\расход.xlsb")
With Sheets("расход")
    .Cells(2, 5).AutoFilter Field:=5, Criteria1:=Me.TextBox1
    .Select
End With
stRow = Sheets("расход").Cells(Rows.Count, 5).End(xlUp).Row
Set myCells = Cells.SpecialCells(xlCellTypeVisible)
 t = 0
    For r = 3 To stRow
    Me.ListBox1.AddItem ""
    Me.ListBox1.List(t, 0) = Sheets("расход").Cells(r, 2).Value
    Me.ListBox1.List(t, 1) = Sheets("расход").Cells(r, 8).Value
    Me.ListBox1.List(t, 2) = Sheets("расход").Cells(r, 9).Value
    Me.ListBox1.List(t, 3) = Sheets("расход").Cells(r, 10).Value
    Me.ListBox1.List(t, 4) = Sheets("расход").Cells(r, 11).Value
    Me.ListBox1.List(t, 5) = Sheets("расход").Cells(r, 15).Value
    Me.ListBox1.List(t, 6) = Sheets("расход").Cells(r, 16).Value
    Me.ListBox1.List(t, 7) = Sheets("расход").Cells(r, 17).Value
     t = t + 1
Next

Windows("расход").Close False
ListBox1.ColumnWidths = "65;125;65;65;65;65;65;65"
Application.ScreenUpdating = True
End Sub
 
Цитата
ALANA написал: Что не так с фильтрацией?
Ну вот опять, какой ответ Вы хотите получить? Раз фильтрация не работает, значит ВСЁ с ней не так.
Цитата
ALANA написал: Я еще подработала код, он стал понятней
Для Вас наверное да, понятнее, но для человека абсолютно далекого от Ваших форм/фильтров/и проч. это просто код. Не о чем.
У Вас ДВА файла. В одном из них ДВЕ формы. К какому файлу/форме этот код относится? ЧТО, по Вашей задумке, он должен делать?
Напишите словами. Обычными, без привязки к VBA  
Согласие есть продукт при полном непротивлении сторон
 
на главной странице - кнопка "Прайс"(это для примера  кроме кнопки на странице нет ничего, и для уменьшения размера) . При нажатии на кнопку появляется форма с названиями изделий, (то что в наличии на данное число). При клике на наименование в прайсе появляется вторая форма. В ней описано движение изделия(когда и от кого поступило, куда и кем расходовалось.(берется из таблицы расход) Это в принципе то, что я хотела бы увидеть.. Но споткнулась на этой фильтрации. Саму фильтрацию делает правильно код, я пошагово проверяла код. но вот в форму вставляет почему то и скрытые строки тоже, при чем только те, что выше выбранной позиции
Изменено: ALANA - 04.03.2017 01:30:16
 
С Вашими файлами так и не разобрался (честно говоря - лень). Валится куча ошибок, постоянно пытается открыться уже открытый файл 'расход' и прочее...
По коду. Вот Вы определили диапазон видимых ячеек (myCells). А дальше что? Где Вы дальше его используете?
Согласие есть продукт при полном непротивлении сторон
 
я пыталась его вставить в строки - Me.ListBox1.List(t, 0) = Sheets("расход").myCells(r, 2).Value
но в таком случае вообще никакой вставки не происходило в  листбокс.. а открытый файл расход у Вас потому что код не до конца выполняется..когда все нормально срабатывает, то вы его вообще не увидите тот лист расход.
 
а вообще, это мои первые формы) я никогда не делала ничего подобного раньше, поэтому наверное они в чем то кривоватые) Да и про то что в эксель можно сделать такое я даже не догадывалась еще год назад) :)
 
ALANA. простите, ваш файл не смотрела (по времени совсем не свободна)... но судя по постановке вопроса, завалялся у меня один файл-пример... разберите его реализацию... что-то мне подсказывает, что вы это пытаетесь сделать, раз пишите .AutoFilter (если правильно поняла вас)... вобщем, пример в помощь прикладываю - если вы в листбокс хотите с отфильтрованного (согласно текстбоксам) диапазона вставлять данные...
p.s. но листбокс можно и с массива заполнять - как альтернатива - ListBox.List=arr ... примеры на форуме были
Изменено: JeyCi - 04.03.2017 09:41:06
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
спасибо большое, буду разбираться)
Страницы: 1
Наверх