Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

15 Декабрь 2018, 14:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Создание множества копий листа разом  (Прочитано 384 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ProstoyPolzovatel
Новичок
*
Offline Offline

Сообщений: 3


« Стартовое сообщение: 24 Ноябрь 2018, 18:41 »

Здравствуйте. Возможно ли как-то упрощенно создать заданное количество копий указанного листа в рамках одной таблицы? По 50-60 раз проводить процедуру "Переместить/скопировать лист - копировать - ок" не очень удобно.
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 162


« Ответ #1: 24 Ноябрь 2018, 18:49 »

Не знаю способа, чтобы было "скопировать N раз". Но если после каждого копирования выделять все одинаковые листы (щелчок по первой вкладке -> Shift+щелчок по последней, или использовать Ctrl+Click), то можно значительно ускорить процесс.
Записан

С уважением,
Михаил Каганский
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 368


« Ответ #2: 24 Ноябрь 2018, 23:27 »

еще как вариант: создаем нужное количество пустых листов, переходим на первый выделяем нужную область, копируем. Выделяем ярлыки созданных листов, становимся в нужное место вставить
Записан
ProstoyPolzovatel
Новичок
*
Offline Offline

Сообщений: 3


« Ответ #3: 25 Ноябрь 2018, 11:54 »

переходим на первый выделяем нужную область, копируем. Выделяем ярлыки созданных листов, становимся в нужное место вставить
В таком случае скрытые столбцы становятся видимыми, фиксация первой строки отменяется, и т.д.. Я слышал, что нужное мне можно сделать с помощью макроса, но в таких вещах совершенно не разбираюсь
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Online Online

Пол: Мужской
Расположение: Киев
Сообщений: 2 636


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #4: 25 Ноябрь 2018, 11:58 »

Можно и макросом.
Но сначала нужно выяснить, что именно будет в этих листах - текст и числа или формулы (в том числе и с сылками на другие листы и даже другие книги)? Упоминание скрытых столбцов наводит на мысль, что речь идет именно о втором варианте

В большинстве случаев нормально сработает такой вариант:
Код:
Sub CopyCurrentSheet
Dim sName As String, sNewName As String, sK As String
Dim oSheets As Variant, i As Long, j As Long, k As Long, m As Long
  sK = InputBox("И сколько копий текущего листа тебе нужно получить?", "Введи целое число","2")
  k = Val(sK)
  If k < 1 Then Exit Sub
  sName = ThisComponent.getCurrentController().getActiveSheet().getName()
  oSheets = ThisComponent.getSheets()
  j = 0
  For i = 1 To k
    For m = 1 To 100
      j = j + 1
      sNewName = sName & "_" & j
      If Not oSheets.hasByName(sNewName) Then
        oSheets.copyByName(sName, sNewName, oSheets.getCount())
        Exit For
      EndIf
    Next m
  Next i
End Sub
Но если где-то "поплывут" формулы - нужно будет думать над другими способами
« Последнее редактирование: 25 Ноябрь 2018, 12:30 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
ProstoyPolzovatel
Новичок
*
Offline Offline

Сообщений: 3


« Ответ #5: 25 Ноябрь 2018, 13:45 »

В большинстве случаев нормально сработает такой вариант:
Спасибо и здесь) Нет, формул там нет, так что такой вариант более чем подходит. Наконец-то мои мучения с ручным копированием листов окончены
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 368


« Ответ #6: 25 Ноябрь 2018, 20:10 »

A для чего второй цикл по m?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Online Online

Пол: Мужской
Расположение: Киев
Сообщений: 2 636


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #7: 25 Ноябрь 2018, 20:35 »

В случае, если макрос будет запущен повторно, простая, прямая генерация нового имени приведет к тому, что программа попытается ещё раз создать листы с теми же именами, что и в прошлый раз.
Цикл по m пытается перебирать существующие листы с помощью переменной j - увеличивает этот номер, пока не встретит не занятое имя листа.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 368


« Ответ #8: 25 Ноябрь 2018, 21:20 »

Спасибо. Теперь понятно
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!