powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обработка выделенного диапазона записей.
25 сообщений из 36, страница 1 из 2
Обработка выделенного диапазона записей.
    #32332288
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли в табличной форме выделить мышкой диапазон строк и обрабатывать уже только выделенное(в частности - экспорт в Excell)?
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32332293
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите Help по свойствам SelTop, SelHeight
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32332298
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Уже теплее. :)
А как этот блок именно обработать, а не только вычислить координаты?
Имею ввиду код процедуры.
В случае с экспортом в Excell - как на место аргументов "Тип объекта" и "Имя объекта" поместить нечто, что Access поймёт?
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32332402
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю как вы выполняете экспорт, видимо используете какой-то из методов объекта DoCmd. Я обычно использую Recordset. Поэтому в данном случае, узнав номера выбранных строк я бы просто прошелся по Recordsetclone формы, брал бы нужные значения из полей и вставлял их в ячейки Excel. Можно использовать и метод Excel CopyFromRecordset, но для этого надо сформировать Recordset на основе выбранных записей. Если вам обязательно надо использовать меьоды Docmd, то запоните, например, временную таблицу, выбранными записями и отправте эту таблицу в Excel, например, методом SendObject.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32332635
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> про RecordSetClone
Никак не просеку синтаксис программы.
Допустим, N_мл = 3 (№ первой записи в диапазоне), N_ст = 7 (№ последней записи). Хоть какую программу приведите обработки. В Help-е только пример возвращения номеров строки.
Куда эти 3 и 7 вставлять, это ведь не уникальные коды?
Понедельник, утро, туплю......
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32332692
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку (м.б. очепятки)
i=1
With Me.RecordsetClone
Do Until .Eof
If i >= N_мл And i <= N_ст then
.....
End if
i = i + 1
if i > N_ст Then Exit Do
.MoveNext
Loop
End With
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333395
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное осталось между "then" и "end if" :(
Навскидку, из кода получается, что если открыть форму и "сортирнуть" её по какому-нибудь полю, а потом выделить диапазон и т.д...., то перебор записей будет происходить в копии рекордсета формы, а в нём запись №1 может быть совсем не той, какая у меня получилась после сортировки в уже открытой форме.
Я имею ввиду, что в коде перебор строк получается не привязанный к индексам, а "по месту".
Допустим, я "сортирну" записи в табличной форме "по убыванию", выделю первые 3 строки, код, по идее, обработает 3 первые записи в рекордсете, но разве они будут те же, что я выделил?
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333469
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вдогонку вопрос:
На какое событие вешать процедуру?
Например, ситуация- сумма по полю в выделенных записях.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333495
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Допустим, я "сортирну" записи в табличной форме "по убыванию", выделю >первые 3 строки, код, по идее, обработает 3 первые записи в рекордсете, но >разве они будут те же, что я выделил?

Уважаемый АндрейК, проверить ваш вопрос времени надо меньше, чем написать.
Откройте свою табличную форму, отсортируйте какое нибудь поле по алфавиту, откройте окно VBA, в окне отладки (Immediate window) наберите ?forms!ИмяФормы.recordsetclone!ИмяПоля
Алексей
(это я для примера)
Измените сортировку в поле, и снова в окно отладки:
?forms!ИмяФормы.recordsetclone!ИмяПоля
Яков
Ну и ....

>Самое интересное осталось между "then" и "end if" :(
А что там интересного...?
я уже говорил, либо непосредственно вносите значения в ячейки Excel, либо сохраняете выбранный диапазон во временной таблице и ее пихаете в Excel привычным образом.

>На какое событие вешать процедуру?

Это уж как вам удобно, для меня удобнее кнопка...
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333821
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кнопка - самое очевидное, конечно.
Но, в случае подсчёта суммы, получается лишнее действие - выделить диапазон + нажать на кнопку. Пробовал вешать процедуру на событие "Текущая запись" - не то: если выделено >1 строки, то хрен чего суммирует. "В запасе" события мыши, а больше ничего на ум не приходит...
(а, может, некуда приходить? :) )
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333844
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда уже некуда вешаться, остается таймер :)
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333904
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще можно повесить на кнопку панели инструментов...
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333914
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не загромождать место на рабочем столе предлагаю вешать все лишнее на нажатие педали под столом.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32333935
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, было бы неплохо сделать Shift с ножным приводом. Когда в одной руке чашка с кофе, то нажимать на Shift было бы удобнее.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32334176
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам бы всё подъ...!
Поставил на событие мыши "кнопка вверх". Проверяю "на левую кнопку" и - вперёд.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32334189
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Поставил на событие мыши "кнопка вверх". Проверяю "на левую кнопку" и - вперёд.

Но выделять можно и клавиатурой, лучше уж таймер
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32336892
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема та же, объект - список.
Для списка св-ва SelTop и т.д. не подходят.
Как сумму по выделенным записям получить - знаю, а вот как кинуть в Excel выделенные в списке записи?
Вопрос по самому коду "сборки" того самого RecordSet, который потом через OutputTo уйдёт в Excel.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337184
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.Selected
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337211
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The next example uses the same list box control, but prints the values of each column for each selected row in the list box, instead of only the values in the bound column.

Sub AllSelectedData()
Dim frm As Form, ctl As Control
Dim varItm As Variant, intI As Integer

Set frm = Forms!Contacts
Set ctl = frm!Names
For Each varItm In ctl.ItemsSelected
For intI = 0 To ctl.ColumnCount - 1
Debug.Print ctl.Column(intI, varItm)
Next intI
Debug.Print
Next varItm
End Sub

(с) RTFM (рулез, как всегда ;) )
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337212
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...Ага, кажется, промазал :(

А все равно их в цикле получать, так, может, через UNION ;)
Ну или (если один из столбцов списка - ключ таблицы - то через WHERE id IN(здесь собрать строчку через зпт).
В общем, вариантов куча...
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337434
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати тема уже обсуждалась.\r
/topic/58604&hl=
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337472
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ссылке обсуждается как собрать в строку ID выделенных в форме строк, разделяя их запятыми.
У меня другая проблема.
"Собрать" в RecordSet выделенные строки и отправить его в Excell.
Если второй этап мне понятен, то первый - в тумане.
Первое, что пришло на ум(?):
Создать локальную таблицу и в цикле, перебирая выделенные строки списка, добавлять в неё нужные запросом на добавление.
Второе, что пришло, но как предположение:
А можно как-то обойтись без таблицы и запросов на добавление?
Интуичу, что так должно быть быстрее, но текст собственно "сборки" в голове(?) не рождается.
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337511
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>По ссылке обсуждается как собрать в строку ID выделенных в форме строк, разделяя их запятыми.

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

ID_LIST = " 10,20,33,40 "

RS.Open "Select * from Mytable where id IN (" & ID_LIST & ")"
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337632
АндрейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не так всё гладко.
Запрос-источник данных списка содержит 5 таблиц и 4 условия отбора.
Эти условия и требуют параметры при попытке выполнить выражение:
Set rs = CurrentDb.OpenRecordset("Select * from MойИсточник where id IN (" & ID_LIST & ")")
Т.е надо и параметры прописывать?
...
Рейтинг: 0 / 0
Обработка выделенного диапазона записей.
    #32337662
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А можно как-то обойтись без таблицы и запросов на добавление?
>Интуичу, что так должно быть быстрее, но текст собственно "сборки" в голове(?) не рождается.

Зря, по моему, вы насчет скорости беспокоитесь. С таблицей будет быстро, только база будет подпухать, если большие объемы будете таким образом обрабатывать.
А если уж так не хочется, я уже говорил о прямом вводе значений в ячейки Excel. Только схема:
Dim n As Long
Dim oEx As Object
Set oEx = CreateObject("Excel.Application")
oEx.Application.Workbooks.Add
oEx.Application.Workbooks(1).Worksheets(1).Name = "Test"
With Me!Tbl1.Form
.RecordsetClone.MoveFirst
.RecordsetClone.Move .SelTop - 1
Do
n = n + 1
oEx.Range("A" & n) = !Поле1 ' Имена полей
oEx.Range("B" & n) = !Поле2
...................
.RecordsetClone.MoveNext
Loop Until n = .SelHeight
End With
oEx.Visible = True
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обработка выделенного диапазона записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]