Показать полную графическую версию : Группировка строк в экселе
Как можно сгруппировать строки в экселе (пользователь делает руками), чтобы потом програмно (скриптом) получать их Range и штамповать их копии. Короче нужно сделать так, чтобы пользователь мог выбирать диапазон, сохранить шаблон, а скрипт потом где-то узнать, что он выбрал и на основе содержимого ячеек как-то заполнять книги
Delirium
14-04-2009, 01:01
pva, я что то не совсем понял смысл. вот как пример:
Sub Макрос1()
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "some text"
End Sub
Скрипт записан макросом. При его применении выделенная пользователем область группируется в 1 ячейку, и в нее пишется текст "some text".
Selection.Copy
Range("D17").Select
ActiveSheet.Paste
А этот код копирует в буфер выделенный диапазон и вставляет его в ячейку D17.
Или нужно было не это?
нет, не это. Допустим есть шаблонные строчки: шапка, заголовок таблицы, строчки таблицы и подвал. Запускается скрипт, который делает запрос, копирует в документ шапку, для каждой таблицы копирует её заголовок и тиражирует строчки, потом копирует туда подвал. Я бы мог просто забить диапазоны в скрипт, но вопрос в том, чтобы этот шаблон мог править тупой пользователь.
Delirium
14-04-2009, 08:03
Ааа, т.е примерно так?
1. На определенной странице есть неопределенное количество строк, в которые заносятся данные(поле1, поле2, поле3). Туда пользователь вбивает данные.
2. На второй странице есть "шапка" - произвольное количество строк/столбцов, которые опять же пользователь может редактировать.
3. На третьей и последующих страницах может содержаться название таблицы, подвал документа и прочее...
Суть - в создании единой страницы на основе всех этих данных? Если да, то я могу поискать, я нечто подобное делал раньше.
Что-то вроде того. Пользователь на понятном ему мышкотыкательно-экселевском языке делает себе шаблон и не парит программера :-) А скрипт берёт данные из базы и собирает отчёт. А программер пьёт чай с плюшками.
На второй странице есть "шапка" - произвольное количество строк/столбцов »
А как-то можно узнать диапазон, который перекрывают все ячейки в листе? чтобы тупо весь лист (только заполненную часть) раскопипастить?
Delirium
15-04-2009, 01:17
Dim FirstRow, FirstCol, LastRow As Integer, LastCol As Integer
Dim theRange As Range
FirstRow = Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByRows).Row
FirstCol = Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByColumns).Column
LastRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
LastCol = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
Set theRng = Range(Cells(FirstRow, FirstCol), Cells(LastRow, LastCol))
MsgBox ("Первая строка=" & FirstRow & " Последняя строка=" & LastRow & " Первый столбец=" & FirstCol & " Последний столбец=" & LastCol)
Ну а из переменных уже не проблема сделать диапазон, я думаю :)
Взято отсюда (http://www.mrexcel.com/archive/VBA/15835.html) .
Также есть свойство UsedRange, но я не тестировал его.
DIM rng
rng = ActiveSheet.UsedRange
Возвращает хитрую структурку, необходимо в отладчике будет добавить Watch на данную переменную, чтобы увидеть содержимое.
В общем, пока что сделал через примечания. То есть в правый нижний угол области ставится примечание, содержащее текст: шапка, заголовок_таблицы, строчка_таблицы, подвал или конец_документа.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.