|
|
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Можно ли в табличной форме выделить мышкой диапазон строк и обрабатывать уже только выделенное(в частности - экспорт в Excell)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 10:20 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Посмотрите Help по свойствам SelTop, SelHeight ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 10:42 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Спасибо! Уже теплее. :) А как этот блок именно обработать, а не только вычислить координаты? Имею ввиду код процедуры. В случае с экспортом в Excell - как на место аргументов "Тип объекта" и "Имя объекта" поместить нечто, что Access поймёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 11:23 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Я не знаю как вы выполняете экспорт, видимо используете какой-то из методов объекта DoCmd. Я обычно использую Recordset. Поэтому в данном случае, узнав номера выбранных строк я бы просто прошелся по Recordsetclone формы, брал бы нужные значения из полей и вставлял их в ячейки Excel. Можно использовать и метод Excel CopyFromRecordset, но для этого надо сформировать Recordset на основе выбранных записей. Если вам обязательно надо использовать меьоды Docmd, то запоните, например, временную таблицу, выбранными записями и отправте эту таблицу в Excel, например, методом SendObject. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2003, 16:53 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
> про RecordSetClone Никак не просеку синтаксис программы. Допустим, N_мл = 3 (№ первой записи в диапазоне), N_ст = 7 (№ последней записи). Хоть какую программу приведите обработки. В Help-е только пример возвращения номеров строки. Куда эти 3 и 7 вставлять, это ведь не уникальные коды? Понедельник, утро, туплю...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 10:33 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Навскидку (м.б. очепятки) 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 11:29 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Самое интересное осталось между "then" и "end if" :( Навскидку, из кода получается, что если открыть форму и "сортирнуть" её по какому-нибудь полю, а потом выделить диапазон и т.д...., то перебор записей будет происходить в копии рекордсета формы, а в нём запись №1 может быть совсем не той, какая у меня получилась после сортировки в уже открытой форме. Я имею ввиду, что в коде перебор строк получается не привязанный к индексам, а "по месту". Допустим, я "сортирну" записи в табличной форме "по убыванию", выделю первые 3 строки, код, по идее, обработает 3 первые записи в рекордсете, но разве они будут те же, что я выделил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 17:41 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
И вдогонку вопрос: На какое событие вешать процедуру? Например, ситуация- сумма по полю в выделенных записях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:30 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
>Допустим, я "сортирну" записи в табличной форме "по убыванию", выделю >первые 3 строки, код, по идее, обработает 3 первые записи в рекордсете, но >разве они будут те же, что я выделил? Уважаемый АндрейК, проверить ваш вопрос времени надо меньше, чем написать. Откройте свою табличную форму, отсортируйте какое нибудь поле по алфавиту, откройте окно VBA, в окне отладки (Immediate window) наберите ?forms!ИмяФормы.recordsetclone!ИмяПоля Алексей (это я для примера) Измените сортировку в поле, и снова в окно отладки: ?forms!ИмяФормы.recordsetclone!ИмяПоля Яков Ну и .... >Самое интересное осталось между "then" и "end if" :( А что там интересного...? я уже говорил, либо непосредственно вносите значения в ячейки Excel, либо сохраняете выбранный диапазон во временной таблице и ее пихаете в Excel привычным образом. >На какое событие вешать процедуру? Это уж как вам удобно, для меня удобнее кнопка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 18:49 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Кнопка - самое очевидное, конечно. Но, в случае подсчёта суммы, получается лишнее действие - выделить диапазон + нажать на кнопку. Пробовал вешать процедуру на событие "Текущая запись" - не то: если выделено >1 строки, то хрен чего суммирует. "В запасе" события мыши, а больше ничего на ум не приходит... (а, может, некуда приходить? :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 10:16 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Когда уже некуда вешаться, остается таймер :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 10:31 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
А еще можно повесить на кнопку панели инструментов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 11:13 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Чтобы не загромождать место на рабочем столе предлагаю вешать все лишнее на нажатие педали под столом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 11:18 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Кстати, было бы неплохо сделать Shift с ножным приводом. Когда в одной руке чашка с кофе, то нажимать на Shift было бы удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 11:27 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Вам бы всё подъ...! Поставил на событие мыши "кнопка вверх". Проверяю "на левую кнопку" и - вперёд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 13:42 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
>Поставил на событие мыши "кнопка вверх". Проверяю "на левую кнопку" и - вперёд. Но выделять можно и клавиатурой, лучше уж таймер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 13:51 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Тема та же, объект - список. Для списка св-ва SelTop и т.д. не подходят. Как сумму по выделенным записям получить - знаю, а вот как кинуть в Excel выделенные в списке записи? Вопрос по самому коду "сборки" того самого RecordSet, который потом через OutputTo уйдёт в Excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 15:29 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
.Selected ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 19:20 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
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 (рулез, как всегда ;) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 20:41 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
...Ага, кажется, промазал :( А все равно их в цикле получать, так, может, через UNION ;) Ну или (если один из столбцов списка - ключ таблицы - то через WHERE id IN(здесь собрать строчку через зпт). В общем, вариантов куча... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 20:46 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
кстати тема уже обсуждалась.\r /topic/58604&hl= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 09:59 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
По ссылке обсуждается как собрать в строку ID выделенных в форме строк, разделяя их запятыми. У меня другая проблема. "Собрать" в RecordSet выделенные строки и отправить его в Excell. Если второй этап мне понятен, то первый - в тумане. Первое, что пришло на ум(?): Создать локальную таблицу и в цикле, перебирая выделенные строки списка, добавлять в неё нужные запросом на добавление. Второе, что пришло, но как предположение: А можно как-то обойтись без таблицы и запросов на добавление? Интуичу, что так должно быть быстрее, но текст собственно "сборки" в голове(?) не рождается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 10:32 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
>По ссылке обсуждается как собрать в строку ID выделенных в форме строк, разделяя их запятыми. если есть идентификаторы записей через запятую то собрать в рекордсет эти записи проще простого ID_LIST = " 10,20,33,40 " RS.Open "Select * from Mytable where id IN (" & ID_LIST & ")" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 10:53 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
Не так всё гладко. Запрос-источник данных списка содержит 5 таблиц и 4 условия отбора. Эти условия и требуют параметры при попытке выполнить выражение: Set rs = CurrentDb.OpenRecordset("Select * from MойИсточник where id IN (" & ID_LIST & ")") Т.е надо и параметры прописывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 12:25 |
|
||
|
Обработка выделенного диапазона записей.
|
|||
|---|---|---|---|
|
#18+
>А можно как-то обойтись без таблицы и запросов на добавление? >Интуичу, что так должно быть быстрее, но текст собственно "сборки" в голове(?) не рождается. Зря, по моему, вы насчет скорости беспокоитесь. С таблицей будет быстро, только база будет подпухать, если большие объемы будете таким образом обрабатывать. А если уж так не хочется, я уже говорил о прямом вводе значений в ячейки 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 12:45 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32337212&tid=1677956]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 505ms |

| 0 / 0 |
