Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обработка выделенного диапазона записей. / 25 сообщений из 36, страница 1 из 2
23.11.2003, 10:20
    #32332288
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Можно ли в табличной форме выделить мышкой диапазон строк и обрабатывать уже только выделенное(в частности - экспорт в Excell)?
...
Рейтинг: 0 / 0
23.11.2003, 10:42
    #32332293
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Посмотрите Help по свойствам SelTop, SelHeight
...
Рейтинг: 0 / 0
23.11.2003, 11:23
    #32332298
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Спасибо! Уже теплее. :)
А как этот блок именно обработать, а не только вычислить координаты?
Имею ввиду код процедуры.
В случае с экспортом в Excell - как на место аргументов "Тип объекта" и "Имя объекта" поместить нечто, что Access поймёт?
...
Рейтинг: 0 / 0
23.11.2003, 16:53
    #32332402
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Я не знаю как вы выполняете экспорт, видимо используете какой-то из методов объекта DoCmd. Я обычно использую Recordset. Поэтому в данном случае, узнав номера выбранных строк я бы просто прошелся по Recordsetclone формы, брал бы нужные значения из полей и вставлял их в ячейки Excel. Можно использовать и метод Excel CopyFromRecordset, но для этого надо сформировать Recordset на основе выбранных записей. Если вам обязательно надо использовать меьоды Docmd, то запоните, например, временную таблицу, выбранными записями и отправте эту таблицу в Excel, например, методом SendObject.
...
Рейтинг: 0 / 0
24.11.2003, 10:33
    #32332635
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
> про RecordSetClone
Никак не просеку синтаксис программы.
Допустим, N_мл = 3 (№ первой записи в диапазоне), N_ст = 7 (№ последней записи). Хоть какую программу приведите обработки. В Help-е только пример возвращения номеров строки.
Куда эти 3 и 7 вставлять, это ведь не уникальные коды?
Понедельник, утро, туплю......
...
Рейтинг: 0 / 0
24.11.2003, 11:29
    #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
24.11.2003, 17:41
    #32333395
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Самое интересное осталось между "then" и "end if" :(
Навскидку, из кода получается, что если открыть форму и "сортирнуть" её по какому-нибудь полю, а потом выделить диапазон и т.д...., то перебор записей будет происходить в копии рекордсета формы, а в нём запись №1 может быть совсем не той, какая у меня получилась после сортировки в уже открытой форме.
Я имею ввиду, что в коде перебор строк получается не привязанный к индексам, а "по месту".
Допустим, я "сортирну" записи в табличной форме "по убыванию", выделю первые 3 строки, код, по идее, обработает 3 первые записи в рекордсете, но разве они будут те же, что я выделил?
...
Рейтинг: 0 / 0
24.11.2003, 18:30
    #32333469
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
И вдогонку вопрос:
На какое событие вешать процедуру?
Например, ситуация- сумма по полю в выделенных записях.
...
Рейтинг: 0 / 0
24.11.2003, 18:49
    #32333495
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
>Допустим, я "сортирну" записи в табличной форме "по убыванию", выделю >первые 3 строки, код, по идее, обработает 3 первые записи в рекордсете, но >разве они будут те же, что я выделил?

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

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

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

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

Но выделять можно и клавиатурой, лучше уж таймер
...
Рейтинг: 0 / 0
27.11.2003, 15:29
    #32336892
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Тема та же, объект - список.
Для списка св-ва SelTop и т.д. не подходят.
Как сумму по выделенным записям получить - знаю, а вот как кинуть в Excel выделенные в списке записи?
Вопрос по самому коду "сборки" того самого RecordSet, который потом через OutputTo уйдёт в Excel.
...
Рейтинг: 0 / 0
27.11.2003, 19:20
    #32337184
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
.Selected
...
Рейтинг: 0 / 0
27.11.2003, 20:41
    #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
27.11.2003, 20:46
    #32337212
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
...Ага, кажется, промазал :(

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

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

ID_LIST = " 10,20,33,40 "

RS.Open "Select * from Mytable where id IN (" & ID_LIST & ")"
...
Рейтинг: 0 / 0
28.11.2003, 12:25
    #32337632
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка выделенного диапазона записей.
Не так всё гладко.
Запрос-источник данных списка содержит 5 таблиц и 4 условия отбора.
Эти условия и требуют параметры при попытке выполнить выражение:
Set rs = CurrentDb.OpenRecordset("Select * from MойИсточник where id IN (" & ID_LIST & ")")
Т.е надо и параметры прописывать?
...
Рейтинг: 0 / 0
28.11.2003, 12:45
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обработка выделенного диапазона записей. / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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