Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Присылайте нам Донат :), напишите за что прислали )


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

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

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

Последний раз редактировалось Vladimir_Der; 07.01.2019 в 12:08.
Vladimir_Der вне форума   Ответить с цитированием
Старый 07.01.2019, 19:45   #2
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,600
Репутация: 1031
По умолчанию

Один с вариантов
Код:

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

__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 10.01.2019, 21:20   #3
Vladimir_Der
 
Регистрация: 10.12.2018
Сообщений: 6
Репутация: 10
По умолчанию

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

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 в 21:23.
Vladimir_Der вне форума   Ответить с цитированием
Старый 10.01.2019, 21:28   #4
Vladimir_Der
 
Регистрация: 10.12.2018
Сообщений: 6
Репутация: 10
По умолчанию

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

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, 21:54   #5
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,600
Репутация: 1031
По умолчанию

Код:

Dim iRecordCount As Integer
Dim iCurrRecord As Integer
Dim aRowsNr() As Integer

должны быть глобальными.

https://youtu.be/0wQ-tWtMt80
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 11.01.2019, 20:57   #6
Vladimir_Der
 
Регистрация: 10.12.2018
Сообщений: 6
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка из таблицы 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


17:50.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru