Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2019, 11:00   #1
Vladimir_Der
Пользователь
 
Регистрация: 10.12.2018
Сообщений: 23
Вопрос Выборка из таблицы с помощью формы

Уважаемые программисты и любители VBA, думаю тема избитая, но я недавно этим занимаюсь и не могу найти решения, помогите пожалуйста
Как пример: В таблице в столбце "Отдел" Иванов повторяется три раза и в столбце "№ выезда" 'номер 1230 повторяется три раза, т.е в столбце "код" имеется три одинаковых записи Иванов1230
Код получается: столбец "Отдел"&столбец "№ выезда(А2=B2&C2).
При заполнении СB1 Иванов и ТВ2 1230 формы в ТВ3 автоматически записывается код который нужно найти в таблице.
Затем на форме в текст боксы TB4,TB5,TB6 автоматически заносятся соответствующие значения строк по столбцам из таблицы.
Далее, помогите пожалуйста !
Если по коду в таблице найдено записей больше чем одна...
Как сделать так, чтобы в TB4,TB5,TB6 формы циклично (при нажатии кнопки на форме"Следующая запись" отобразились последующие данные , соответствующие коду.

Описание задачи есть в самом файле в коде VBA на форме.
Заранее благодарен
Вложения
Тип файла: rar Тест.rar (28.2 Кб, 10 просмотров)

Последний раз редактировалось Vladimir_Der; 07.01.2019 в 11:08.
Vladimir_Der вне форума Ответить с цитированием
Старый 07.01.2019, 18:45   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Один с вариантов
Код:
Dim iRecordCount As Integer
Dim iCurrRecord As Integer
Dim aRowsNr() As Integer

Private Sub CommandButton2_Click()
    If iRecordCount > 0 Then
        If iCurrRecord < iRecordCount - 1 Then
            iCurrRecord = iCurrRecord + 1
        Else
            iCurrRecord = 0
        End If
    End If
    With Sheets("Лист1")
        UserForm1.TB4.Text = .Cells(aRowsNr(iCurrRecord), 4)
        UserForm1.TB5.Text = .Cells(aRowsNr(iCurrRecord), 5)
        UserForm1.TB6.Text = .Cells(aRowsNr(iCurrRecord), 6)
        MsgBox "Нашел в строке " + CStr(aRowsNr(iCurrRecord))
    End With
End Sub



' автоматическая подстановка данных в форму
Private Sub TB2_Change()
    
    Dim iRecord As Integer
    
    Dim firstAddress
    Dim i As Range 'выбираем переменную
    Set i = Лист1.Range("A:A") ' переменная равна диапазону на листе
    
    Dim sh As Worksheet 'выбираем переменную для листа
    Set sh = Sheets("Лист1") ' переменная равна названию листа
    sh.Select ' переменная равна названию листа
    UserForm1.TB3.Text = UserForm1.CB1.Text + UserForm1.TB2.Text ' получаем КОД
    iRecordCount = Application.WorksheetFunction.CountIf(i, TB3.Value)
    If iRecordCount = 0 Then Exit Sub
    Label7.Caption = "Найдено записей: " & iRecordCount
    ReDim aRowsNr(iRecordCount - 1)
    
    Set n = Columns.Item(1).Find(UserForm1.TB3.Text, , xlValues, xlWhole) ' n - переменная и может быть любой
    If Not n Is Nothing Then
        firstAddress = n.Address
        iRecord = 0: aRowsNr(iRecord) = n.Row
        Do
            Set n = Columns.Item(1).FindNext(n)
            If n Is Nothing Then
                GoTo DoneFinding
            Else
                If n.Address = firstAddress Then Exit Do
                iRecord = iRecord + 1
                aRowsNr(iRecord) = n.Row
            End If
        Loop
        
        
DoneFinding:
        iCurrRecord = 0
        UserForm1.TB4.Text = sh.Cells(n.Row, 4)
        UserForm1.TB5.Text = sh.Cells(n.Row, 5)
        UserForm1.TB6.Text = sh.Cells(n.Row, 6)
        MsgBox "Нашел в строке " + CStr(aRowsNr(iCurrRecord))
    End If
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.01.2019, 20:20   #3
Vladimir_Der
Пользователь
 
Регистрация: 10.12.2018
Сообщений: 23
По умолчанию

Александр, большое спасибо за участие, попробую разобраться с кодом, но пока не работает, спотыкается на строчке

UserForm1.TB4.Text = .Cells(aRowsNr(iCurrRecord), 4), при просмотре выдает значение iCurrRecord=0 (Пробую по Иванову где три записи)

и выдает ошибку out of range

Следующие постоянные
Dim iRecordCount As Integer
Dim iCurrRecord As Integer
Dim aRowsNr() As Integer

я поместил во внутрь блока
Private Sub CommandButton2_Click()

иначе сразу выдавалась ошибка
Может быть в этом и ошибка, что я их неправильно объявляю?

Последний раз редактировалось Vladimir_Der; 10.01.2019 в 20:23.
Vladimir_Der вне форума Ответить с цитированием
Старый 10.01.2019, 20:28   #4
Vladimir_Der
Пользователь
 
Регистрация: 10.12.2018
Сообщений: 23
По умолчанию

Александр, большое спасибо за участие, попробую разобраться с кодом, но пока не работает, спотыкается на строчке

UserForm1.TB4.Text = .Cells(aRowsNr(iCurrRecord), 4), при просмотре выдает значение iCurrRecord=0 (Пробую по Иванову где три записи)

и выдает ошибку out of range

Следующие постоянные
Dim iRecordCount As Integer
Dim iCurrRecord As Integer
Dim aRowsNr() As Integer

я поместил во внутрь блока
Private Sub CommandButton2_Click()

иначе сразу выдавалась ошибка
Может быть в этом и ошибка, что я их неправильно объявляю?
Vladimir_Der вне форума Ответить с цитированием
Старый 10.01.2019, 20:54   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Dim iRecordCount As Integer
Dim iCurrRecord As Integer
Dim aRowsNr() As Integer
должны быть глобальными.

https://youtu.be/0wQ-tWtMt80
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 11.01.2019, 19:57   #6
Vladimir_Der
Пользователь
 
Регистрация: 10.12.2018
Сообщений: 23
По умолчанию

Александр, огромное спасибо! Все работает. Теперь буду знать как объявлять переменные, ранее я не работал с ними.
Vladimir_Der вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка из таблицы shtep PHP 1 17.05.2012 20:40
Выборка из таблицы aimk0 БД в Delphi 10 14.10.2010 10:39
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Выборка из таблицы Kenny Spark Microsoft Office Excel 4 16.07.2009 15:15
выборка из таблицы Screame Microsoft Office Excel 2 12.07.2009 19:55