Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2012, 22:13   #1
a-muz
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 5
По умолчанию Копирование листов имеющих общий символ в названии.

Доброго дня. Есть книга excel, которую создает сторонняя программа, в книге помимо прочих листов есть листы имеющие названия N1,N2,N3,N... (до бесконечности). Задача скопировать, все имеющие в названии букву N листы, один в один (т.е. без изменений, в т.ч. само название листа) в новую (автоматически создаваемую) книгу.
Прошу помощи, заранее спасибо.
a-muz вне форума Ответить с цитированием
Старый 31.05.2012, 07:09   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Задача простая, но есть "куча" уточняющих вопросов:
1. Где (в какой книге) должен располагаться макрос копирования нужных листов?
2. Как запускать процедуру копирования (вручную, по какому-либо событию и т.п.)
3. Как указать макросу на исходную книгу? (конкретное имя? выбор из каталога?)
4. Какое имя присваивать создаваемой книге?
5. Нужно ли ее куда-либо сохранять? Закрывать после сохранения?
6. Что делать, если такая книга уже существует?
7. Что делать, если в исходной книге нет ни одного листа, удовлетворяющего условию?
8. Возможно ли в копируемых листах наличие ссылок и связей? Если "да", то что с ними делать после копирования?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 31.05.2012, 09:33   #3
a-muz
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 5
По умолчанию

1 Макрос распологается в исходной книге, с которой надо скопировать листы.
2 Копирование запускается путем нажатие кнопки, к которой привязан макрос. (мною реализованно, так как копирование часть всего процесса)
3 Макрос должен работать в исходной книге, соответственно с ней же и работает. (книга открыта) На данный момент реализация задачи есть, но к сожалению только для 1-го листа.
4,5 Имя не принципиально. Сохранять, закрывать и прочие действия с книгой будут производится вручную.
6 Шанс на то, что будет открыта книга с таким же названием практически нулевой. Но возможно новую книгу будет не лишним обозвать "new 00.00.00" (где нули текущая дата) При повторном формировании с такой же датой предложить её перезаписать (ну типа закрыть старую и открыть новую)
7 Лист с таким условием есть однозначно, формирование такого листа является обязательным условием стороней программы. Колличество может отличатся от 1 до бесконечности.
8 ссылки и связи будут обязательно, желательно их "разрушить". Типа функции "копировать - вставить занчения"

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

Последний раз редактировалось a-muz; 31.05.2012 в 09:39.
a-muz вне форума Ответить с цитированием
Старый 31.05.2012, 09:43   #4
a-muz
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 5
По умолчанию Макрос

Sub Gen()
Sheets("N1").Copy After:=Sheets(Sheets.Count)
Range("I80:K80").Select
ActiveCell.FormulaR1C1 = "=(K!R[-59]C[-5])"
Range("I80:K80").Select
ActiveCell.FormulaR1C1 = "=K!R[-59]C[-5]*1.25"
Range("I81:K81").Select
MsgBox "Формирование завершено"
End Sub
a-muz вне форума Ответить с цитированием
Старый 31.05.2012, 10:30   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Тогда, примерно так:
Код:
Sub qq()
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Dim ws As Worksheet: Workbooks.Add xlWBATWorksheet
    For Each ws In ThisWorkbook.Sheets
        If InStr(1, ws.Name, "N") <> 0 Then
            ws.Copy After:=ActiveWorkbook.Sheets(Sheets.Count)
            ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
        End If
    Next
    ActiveWorkbook.Sheets(1).Delete
End Sub
После выполнения этого макроса, все требуемые листы будут скопированы в новую книгу, которая и будет активной. Все формулы и связи будут заменены на текущие значения. Далее, сохраните ее в нужное место с нужным именем.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 31.05.2012, 10:52   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если бы не макрос в этом файле - то имхо проще (и думаю быстрее, хотя зависит конечно от количества) удалить "прочие листы" и сохранить книгу под другим именем.

Про имя для сохранения - я обычно в таких случаях формирую имя в формате гггг.мм.дд-чч.мм.сс. Так гарантированно не будет повтора в имени, избегаем лишних "кододвижений", ни один файл не будет потерян.
И сортируется по имени удобно, в хронологическом порядке (если текстовая составляющая разная - её можно писать в конец).
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 31.05.2012 в 11:01.
Hugo121 вне форума Ответить с цитированием
Старый 31.05.2012, 11:22   #7
a-muz
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 5
Радость Большое спасибо

Спасибо, все работает. В ответ хотелось бы быть полезным.
a-muz вне форума Ответить с цитированием
Старый 31.05.2012, 11:26   #8
a-muz
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 5
По умолчанию

К сожалению макрос пишется для книги, которой будут пользоватся большое колличество сотрудников. Сохранение в архивах по уникальным номером может привести к "потере ориентации" у некоторых индивидов, что может негативно отразится на результате работы. ))))
a-muz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование листов (не работает) WIC Microsoft Office Excel 1 29.02.2012 15:11
Копирование данных из 2-ух листов в один Marishka2011 Microsoft Office Excel 0 01.04.2011 16:32
Копирование листов из закрытой книги rubius2008 Microsoft Office Excel 6 05.02.2011 22:44
Сравнение листов в книге, и копирование значений Josser Microsoft Office Excel 10 22.07.2009 08:26
копирование листов из закрытых книг mephist Microsoft Office Excel 4 10.07.2009 17:18