Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Группировка строк в экселе (http://forum.oszone.net/showthread.php?t=137555)

pva 13-04-2009 15:35 1092801

Группировка строк в экселе
 
Как можно сгруппировать строки в экселе (пользователь делает руками), чтобы потом програмно (скриптом) получать их Range и штамповать их копии. Короче нужно сделать так, чтобы пользователь мог выбирать диапазон, сохранить шаблон, а скрипт потом где-то узнать, что он выбрал и на основе содержимого ячеек как-то заполнять книги

Delirium 14-04-2009 01:01 1093357

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.

Или нужно было не это?

pva 14-04-2009 07:53 1093447

нет, не это. Допустим есть шаблонные строчки: шапка, заголовок таблицы, строчки таблицы и подвал. Запускается скрипт, который делает запрос, копирует в документ шапку, для каждой таблицы копирует её заголовок и тиражирует строчки, потом копирует туда подвал. Я бы мог просто забить диапазоны в скрипт, но вопрос в том, чтобы этот шаблон мог править тупой пользователь.

Delirium 14-04-2009 08:03 1093452

Ааа, т.е примерно так?
1. На определенной странице есть неопределенное количество строк, в которые заносятся данные(поле1, поле2, поле3). Туда пользователь вбивает данные.
2. На второй странице есть "шапка" - произвольное количество строк/столбцов, которые опять же пользователь может редактировать.
3. На третьей и последующих страницах может содержаться название таблицы, подвал документа и прочее...

Суть - в создании единой страницы на основе всех этих данных? Если да, то я могу поискать, я нечто подобное делал раньше.

pva 14-04-2009 13:45 1093715

Что-то вроде того. Пользователь на понятном ему мышкотыкательно-экселевском языке делает себе шаблон и не парит программера :-) А скрипт берёт данные из базы и собирает отчёт. А программер пьёт чай с плюшками.
Цитата:

Цитата Delirium
На второй странице есть "шапка" - произвольное количество строк/столбцов »

А как-то можно узнать диапазон, который перекрывают все ячейки в листе? чтобы тупо весь лист (только заполненную часть) раскопипастить?

Delirium 15-04-2009 01:17 1094324

Код:

    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)

Ну а из переменных уже не проблема сделать диапазон, я думаю :)

Взято отсюда .
Также есть свойство UsedRange, но я не тестировал его.

Код:

DIM rng
rng = ActiveSheet.UsedRange

Возвращает хитрую структурку, необходимо в отладчике будет добавить Watch на данную переменную, чтобы увидеть содержимое.

pva 16-04-2009 12:41 1095657

В общем, пока что сделал через примечания. То есть в правый нижний угол области ставится примечание, содержащее текст: шапка, заголовок_таблицы, строчка_таблицы, подвал или конец_документа.


Время: 05:59.

Время: 05:59.
© OSzone.net 2001-