Доброго времени суток, уважаемые. Столкнулся с такой задачей. Есть книга Экзеля ( назовем ее Исходник) , которая формируется/создается сторонней программой. Количество листов в ней неизвестно, но известны возможные названия. ( к примеру исх1, исх2 ... исх5) Есть вторая книга Экзеля ( назовем ее Шаблон ) в которой созданы листы исх1, исх2, исх3, исх4, исх5 . На каждом листей в диапазоне А1:М15 стоит формула ссылающаяся на лист с таким же названием в книге Исходник . То бишь книга Шаблон постоянна со своими листами ,а Исходник может меняться по кол-ву листов. Ссылаться не существующий лист нельзя. Может можно сделать какую-то проверку, чтобы при открытие книги Шаблон происходила проверка на наличие нужных листов и уже дальше прописывались формулы. Только вот как это сделать не соображу. Допустим сделал проверку на наличие листа. Как программно вставить данные из книги Исходник, чтобы это не грузило весь процесс.
Доброго времени суток, уважаемые. Столкнулся с такой задачей. Есть книга Экзеля ( назовем ее Исходник) , которая формируется/создается сторонней программой. Количество листов в ней неизвестно, но известны возможные названия. ( к примеру исх1, исх2 ... исх5) Есть вторая книга Экзеля ( назовем ее Шаблон ) в которой созданы листы исх1, исх2, исх3, исх4, исх5 . На каждом листей в диапазоне А1:М15 стоит формула ссылающаяся на лист с таким же названием в книге Исходник . То бишь книга Шаблон постоянна со своими листами ,а Исходник может меняться по кол-ву листов. Ссылаться не существующий лист нельзя. Может можно сделать какую-то проверку, чтобы при открытие книги Шаблон происходила проверка на наличие нужных листов и уже дальше прописывались формулы. Только вот как это сделать не соображу. Допустим сделал проверку на наличие листа. Как программно вставить данные из книги Исходник, чтобы это не грузило весь процесс.Stormy
Как вариант: Можно создать ( вручную ) все возможные листы и поставить ссылки с исх1 в Шаблоне на исх1 в Исходнике и так все листы. Дальше уже, если даже какой-то лист окажется удаленным он просто не отобразится и в ячейка появится #ссылка. Жить с этим можно, остается единственный момент как обнулить ошибку или допустим вообще очистить лист от формул?. Возвращаясь к предыдущему сообщению на ум приходит сделать проверку наличия листов и повесить ее на открытие книги. В этом случае у меня будет 20 раз срабатывать эта проверка ( так как открытие происходит из ОЛЕ объектов, а они каждый сам по себе создают новую книгу ) . Самым приемлемым кажется вариант с формулами. То есть вместо обычной формулы в книге Шаблон
Код
=[Исходник.xlsx]исх1!A1
использовать формулу
Код
=ЕСЛИОШИБКА([Исходник.xlsx]исх1!A1;0)
В таком случае как заменить формулы? На данный момент я делаю так. Копирую таблицу из Исходник → Вставляю в Шаблон → Через меню Вставка вставляю связь.
Как вариант: Можно создать ( вручную ) все возможные листы и поставить ссылки с исх1 в Шаблоне на исх1 в Исходнике и так все листы. Дальше уже, если даже какой-то лист окажется удаленным он просто не отобразится и в ячейка появится #ссылка. Жить с этим можно, остается единственный момент как обнулить ошибку или допустим вообще очистить лист от формул?. Возвращаясь к предыдущему сообщению на ум приходит сделать проверку наличия листов и повесить ее на открытие книги. В этом случае у меня будет 20 раз срабатывать эта проверка ( так как открытие происходит из ОЛЕ объектов, а они каждый сам по себе создают новую книгу ) . Самым приемлемым кажется вариант с формулами. То есть вместо обычной формулы в книге Шаблон
Код
=[Исходник.xlsx]исх1!A1
использовать формулу
Код
=ЕСЛИОШИБКА([Исходник.xlsx]исх1!A1;0)
В таком случае как заменить формулы? На данный момент я делаю так. Копирую таблицу из Исходник → Вставляю в Шаблон → Через меню Вставка вставляю связь.Stormy
Sub ertert() 'в книге Шаблон Dim wsh As Worksheet On Error Resume Next: Err.Clear With Workbooks("Исходник.xlsx") For Each wsh In ThisWorkbook.Worksheets wsh.Range("A1:M15").Value = .Sheets(wsh.Name).Range("A1:M15").Value If Err Then Err.Clear: MsgBox "there is no Sheet " & wsh.Name, 64 Next wsh End With End Sub
[/vba] предполагается, что Шаблон и Исходник открыты одновременно
может как-то так: [vba]
Код
Sub ertert() 'в книге Шаблон Dim wsh As Worksheet On Error Resume Next: Err.Clear With Workbooks("Исходник.xlsx") For Each wsh In ThisWorkbook.Worksheets wsh.Range("A1:M15").Value = .Sheets(wsh.Name).Range("A1:M15").Value If Err Then Err.Clear: MsgBox "there is no Sheet " & wsh.Name, 64 Next wsh End With End Sub
[/vba] предполагается, что Шаблон и Исходник открыты одновременноnilem
Яндекс.Деньги 4100159601573
Сообщение отредактировал nilem - Понедельник, 06.10.2014, 11:37