|
![]() |
#1 |
Участник
|
Поискал, нет примера вариантного массива в аксе.
Кстати, а зачем нужно программно выполнять такую задачу? Мы в свое время делали это для построения диаграмм. Какие еще задачи требуют этого? |
|
![]() |
#2 |
Участник
|
Задался целю копировать формат секции отчета сразу на диапазон ячеек (именно форматирование - специальой вставкой) Т.е. данные в отчет выводятся скопом через ADO или буфер обмена, а стиль накладывается сверху. Поскольку секция строк прерывается секцией групп - зпоминаю все диапозоны в отчете и разом к ним применяю формат секции.
Вобщем пока что остановился на варианте - строка через точку с запятой, но по 30 значений (дапазонов) в цикле форматирую. Последний раз редактировалось Gustav; 19.12.2008 в 09:15. Причина: первоначально из-за опечатки было написано ДДЕ (вместо ADO) |
|
![]() |
#3 |
Moderator
|
Цитата:
Сообщение от MironovI
![]() Задался целю копировать формат секции отчета сразу на диапазон ячеек (именно форматирование - специальой вставкой) Т.е. данные в отчет выводятся скопом через ADO или буфер обмена, а стиль накладывается сверху. Поскольку секция строк прерывается секцией групп - зпоминаю все диапозоны в отчете и разом к ним применяю формат секции.
Последний раз редактировалось Gustav; 19.12.2008 в 09:25. |
|
![]() |
#4 |
Moderator
|
Иван, вот еще вариант из старого чулана. Думаю, должен понравиться
![]() Если ты можешь использовать какую-то свободную колонку для простановки метки, которая будет означать, что это строка данных, то можно попробовать так (эту служебную колонку потом можно удалить): 1. Выбираешь пустую колонку. В VBA-примере ниже - это колонка A. 2. Если строку надо выделять и форматитровать, то пишем в эту колонку 1. В противном случае оставляем ячейку пустую. 3. Выполняем "ручную" операцию "Правка - Перейти - Выделить - Константы - Числа". 4. Получившееся выделение распространяем на всю ширину листа. На VBA это выглядит примерно вот так: Код: Sub ExcelVBAMacro1() Dim rng As Range 'как будто это мы проставили при выводе отчета: Range("A12:A16,A18:A22,A24:A28,A30:A34,A36:A40").Value = 1 'если строка будет капризничать, то заменить , на ; Set rng = ActiveSheet.Columns("A:A") Set rng = rng.SpecialCells(xlCellTypeConstants, 1).EntireRow rng.Select End Sub Результат работы этого кода: |
|
![]() |
#5 |
Участник
|
Эх понравилось.. тут получается правда под каждую секцию отчета нужно свою колонку отдельную.. жаль при "найти и выделить" нельзя указать конкретное значение типа 1 или 2.. ну тоже вариант по-любому
![]() |
|
![]() |
#6 |
Moderator
|
Цитата:
Код: Sub ExcelVBAMacro2() Dim rng As Range ' колонка А Dim rng1 As Range 'синий Dim rng2 As Range 'желтый Range("A5:A8,A15:A17,A24:A27").Value = 1 Range("A9:A13,A18:A22,A28:A32").Value = "a" Set rng = ActiveSheet.Columns("A:A") Set rng1 = rng.SpecialCells(xlCellTypeConstants, 1).EntireRow rng1.Interior.ColorIndex = 37 Set rng2 = rng.SpecialCells(xlCellTypeConstants, 2).EntireRow rng2.Interior.ColorIndex = 6 End Sub И еще в запасе несколько подобных "индикаторов" - пустые, логические, ошибочные даже (можно ввести в ячейку формулу =0/0 и получить ошибку, которую можно выделить ![]() Но, согласен, если бы можно было помимо "Константа - Число" еще при этом и конкретное число указывать - было бы очень удобно для подобных манипуляций. |
|
![]() |
#7 |
Moderator
|
Эх, разошёлся я, раскочегарился
![]() Цитата:
На каждом шаге фиксируется диапазон (несколько несоседних строк) для конкретной метки. "Фиксируется" - в соответствующую объектную переменную, в Аксапте это будут COMы, здесь в Excel мы можем себе позволить массив типа Range. С каждым таким составным диапазоном потом можно делать что угодно. В нижеследующем VBA-примере я их расцвечиваю разными цветами: Код: Sub ExcelVBAMacro3() Dim rngB As Range 'колонка B Dim rng(1 To 10) As Range 'массив диапазонов Dim z As Integer Dim i As Integer ActiveWorkbook.Names.Add Name:="current", RefersToR1C1:="=0" 'генерирование тестовых данных - в 2 колонки For z = 1 To 4 For i = 1 To 10 'меточные значения в колонке A Cells((z - 1) * 10 + i, 1).Value = i 'формулы с "ошибкой-индикатором" в колонке B Cells((z - 1) * 10 + i, 2).FormulaR1C1 = "=RC[-1]/(RC[-1]-current)" Next i Next z Set rngB = Range(Range("B1"), Range("B1").End(xlDown)) 'определение диапазонов For i = 1 To 10 'фактически присваивание current = i ActiveWorkbook.Names.Add Name:="current", RefersToR1C1:="=" & CStr(i) '"Правка - Перейти - Выделить - Формулы - Ошибки". Set rng(i) = rngB.SpecialCells(xlCellTypeFormulas, 16).EntireRow Next i 'визуализация диапазонов расцвечиванием For i = 1 To 10 rng(i).Interior.ColorIndex = i Next i End Sub |
|
![]() |
#8 |
Участник
|
задача обновить прайс,хаотично вытащить 1500 позиций ,вставив их на другой лист
Последний раз редактировалось AFT; 23.12.2016 в 15:03. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|