Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как избежать ошибки при удаление/отсутствии листа. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как избежать ошибки при удаление/отсутствии листа. (Макросы/Sub)
Как избежать ошибки при удаление/отсутствии листа.
Stormy Дата: Пятница, 03.10.2014, 07:24 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток, уважаемые.
Столкнулся с такой задачей.
Есть книга Экзеля ( назовем ее Исходник) , которая формируется/создается сторонней программой. Количество листов в ней неизвестно, но известны возможные названия. ( к примеру исх1, исх2 ... исх5)
Есть вторая книга Экзеля ( назовем ее Шаблон ) в которой созданы листы исх1, исх2, исх3, исх4, исх5 . На каждом листей в диапазоне А1:М15 стоит формула ссылающаяся на лист с таким же названием в книге Исходник .
То бишь книга Шаблон постоянна со своими листами ,а Исходник может меняться по кол-ву листов. Ссылаться не существующий лист нельзя. Может можно сделать какую-то проверку, чтобы при открытие книги Шаблон происходила проверка на наличие нужных листов и уже дальше прописывались формулы. Только вот как это сделать не соображу. Допустим сделал проверку на наличие листа. Как программно вставить данные из книги Исходник, чтобы это не грузило весь процесс.
К сообщению приложен файл: 1568891.xlsx (8.8 Kb) · 1159055.xlsx (10.9 Kb)


Место для рекламы.
 
Ответить
СообщениеДоброго времени суток, уважаемые.
Столкнулся с такой задачей.
Есть книга Экзеля ( назовем ее Исходник) , которая формируется/создается сторонней программой. Количество листов в ней неизвестно, но известны возможные названия. ( к примеру исх1, исх2 ... исх5)
Есть вторая книга Экзеля ( назовем ее Шаблон ) в которой созданы листы исх1, исх2, исх3, исх4, исх5 . На каждом листей в диапазоне А1:М15 стоит формула ссылающаяся на лист с таким же названием в книге Исходник .
То бишь книга Шаблон постоянна со своими листами ,а Исходник может меняться по кол-ву листов. Ссылаться не существующий лист нельзя. Может можно сделать какую-то проверку, чтобы при открытие книги Шаблон происходила проверка на наличие нужных листов и уже дальше прописывались формулы. Только вот как это сделать не соображу. Допустим сделал проверку на наличие листа. Как программно вставить данные из книги Исходник, чтобы это не грузило весь процесс.

Автор - Stormy
Дата добавления - 03.10.2014 в 07:24
Stormy Дата: Пятница, 03.10.2014, 07:44 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Как вариант:
Можно создать ( вручную ) все возможные листы и поставить ссылки с исх1 в Шаблоне на исх1 в Исходнике и так все листы. Дальше уже, если даже какой-то лист окажется удаленным он просто не отобразится и в ячейка появится #ссылка. Жить с этим можно, остается единственный момент как обнулить ошибку или допустим вообще очистить лист от формул?.
Возвращаясь к предыдущему сообщению на ум приходит сделать проверку наличия листов и повесить ее на открытие книги. В этом случае у меня будет 20 раз срабатывать эта проверка ( так как открытие происходит из ОЛЕ объектов, а они каждый сам по себе создают новую книгу ) . Самым приемлемым кажется вариант с формулами. То есть вместо обычной формулы в книге Шаблон
Код
=[Исходник.xlsx]исх1!A1

использовать формулу
Код
=ЕСЛИОШИБКА([Исходник.xlsx]исх1!A1;0)

В таком случае как заменить формулы? На данный момент я делаю так.
Копирую таблицу из Исходник → Вставляю в Шаблон → Через меню Вставка вставляю связь.


Место для рекламы.
 
Ответить
СообщениеКак вариант:
Можно создать ( вручную ) все возможные листы и поставить ссылки с исх1 в Шаблоне на исх1 в Исходнике и так все листы. Дальше уже, если даже какой-то лист окажется удаленным он просто не отобразится и в ячейка появится #ссылка. Жить с этим можно, остается единственный момент как обнулить ошибку или допустим вообще очистить лист от формул?.
Возвращаясь к предыдущему сообщению на ум приходит сделать проверку наличия листов и повесить ее на открытие книги. В этом случае у меня будет 20 раз срабатывать эта проверка ( так как открытие происходит из ОЛЕ объектов, а они каждый сам по себе создают новую книгу ) . Самым приемлемым кажется вариант с формулами. То есть вместо обычной формулы в книге Шаблон
Код
=[Исходник.xlsx]исх1!A1

использовать формулу
Код
=ЕСЛИОШИБКА([Исходник.xlsx]исх1!A1;0)

В таком случае как заменить формулы? На данный момент я делаю так.
Копирую таблицу из Исходник → Вставляю в Шаблон → Через меню Вставка вставляю связь.

Автор - Stormy
Дата добавления - 03.10.2014 в 07:44
Stormy Дата: Понедельник, 06.10.2014, 09:22 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Люди добрые, может у кого есть мысли как сделать иначе или метод решения %)


Место для рекламы.
 
Ответить
СообщениеЛюди добрые, может у кого есть мысли как сделать иначе или метод решения %)

Автор - Stormy
Дата добавления - 06.10.2014 в 09:22
nilem Дата: Понедельник, 06.10.2014, 11:36 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
может как-то так:
[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]
предполагается, что Шаблон и Исходник открыты одновременно


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Понедельник, 06.10.2014, 11:37
 
Ответить
Сообщениеможет как-то так:
[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
Дата добавления - 06.10.2014 в 11:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как избежать ошибки при удаление/отсутствии листа. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!