Есть рабочий макрос. Работает отлично, но че то завис над тем как сделать. Суть в следующем. Макрос разбрасывает по папкам файлы с одинаковыми названием в определенной ячейки. Работает отлично, но когда имя листа у всех файлов одинаково. В моем случае S = "TDSheet". Если имя листа меняется то выдает ошибку. Во вложении пример и в "Книге 4" имя листа переименовано в "TDSheets" и выдает ошибку. Как исправить данную проблему что бы макрос работал при любых именах Листа?
Есть рабочий макрос. Работает отлично, но че то завис над тем как сделать. Суть в следующем. Макрос разбрасывает по папкам файлы с одинаковыми названием в определенной ячейки. Работает отлично, но когда имя листа у всех файлов одинаково. В моем случае S = "TDSheet". Если имя листа меняется то выдает ошибку. Во вложении пример и в "Книге 4" имя листа переименовано в "TDSheets" и выдает ошибку. Как исправить данную проблему что бы макрос работал при любых именах Листа?tumbinskiy
наверное надо изменить метод получения данных из закрытой книги на открытие каждой книги. Хотя бы для получения имени листа. Но уж если книгу открыли, то можно получать данные и напрямую из неё без использования функции GetValue. Это будет немного медленнее.
наверное надо изменить метод получения данных из закрытой книги на открытие каждой книги. Хотя бы для получения имени листа. Но уж если книгу открыли, то можно получать данные и напрямую из неё без использования функции GetValue. Это будет немного медленнее.alex77755
Интересный подход... Как-то логически надо подходить к проблеме-то. Представьте, что Вы не знаете человека в лицо. Знаете его фамилию - Иванова. Заходите в отдел и ищите эту Иванову. Никто не откликается. И правильно делает - Иванова три месяца назад вышла замуж и теперь она Петрова. Без знания этой информации Вы её никогда не найдете. Ну или если кто не подскажет. Так же и в Excel - если он не знает некий постоянный признак(или ему его кто-то не подскажет) - он не поймет с какого листа брать данные и будет брать с того, о котором ему сказали. Советую завести отдельный лист в этих книгах, в котором в определенной ячейке прописать некую формулу, которая будет получать имя нужного листа(ЯДЕЙКА или макрофункция). Дать этому листу уникальное имя и скрыть его, чтобы не было соблазна удалять.
Еще вариант: дать уникальное кодовое имя листу, с которого планируется данные переносить. Делается это из проекта VBA в Proporties листа так же, как для любого объекта. Правда, придется написать свою функцию, которая будет этот лист определять по кодовому имени, чтобы можно было к нему обратиться. Ну и получать данные придется не из закрытой книги, а открывать её предварительно в скрытом режиме(через GetOgject либо обычным методом Open).
Как-то так...
Интересный подход... Как-то логически надо подходить к проблеме-то. Представьте, что Вы не знаете человека в лицо. Знаете его фамилию - Иванова. Заходите в отдел и ищите эту Иванову. Никто не откликается. И правильно делает - Иванова три месяца назад вышла замуж и теперь она Петрова. Без знания этой информации Вы её никогда не найдете. Ну или если кто не подскажет. Так же и в Excel - если он не знает некий постоянный признак(или ему его кто-то не подскажет) - он не поймет с какого листа брать данные и будет брать с того, о котором ему сказали. Советую завести отдельный лист в этих книгах, в котором в определенной ячейке прописать некую формулу, которая будет получать имя нужного листа(ЯДЕЙКА или макрофункция). Дать этому листу уникальное имя и скрыть его, чтобы не было соблазна удалять.
Еще вариант: дать уникальное кодовое имя листу, с которого планируется данные переносить. Делается это из проекта VBA в Proporties листа так же, как для любого объекта. Правда, придется написать свою функцию, которая будет этот лист определять по кодовому имени, чтобы можно было к нему обратиться. Ну и получать данные придется не из закрытой книги, а открывать её предварительно в скрытом режиме(через GetOgject либо обычным методом Open).
Если книгу открывать, то не обязательно знать ни имя листа, ни кодовое имя В открытой книге можно обратиться к листу по индексу. И без разницы какое у него имя. Особенно если в книге всего один лист. Но мне кажется, что где-то попадалась функция возвращающая имя листа из закрытой книги по его индексу Могу ошибаться
Если книгу открывать, то не обязательно знать ни имя листа, ни кодовое имя В открытой книге можно обратиться к листу по индексу. И без разницы какое у него имя. Особенно если в книге всего один лист. Но мне кажется, что где-то попадалась функция возвращающая имя листа из закрытой книги по его индексу Могу ошибатьсяalex77755
Могу помочь в VB6, VBA Alex77755@mail.ru
Сообщение отредактировал alex77755 - Среда, 24.09.2014, 18:25
Если пользователь может переименовать лист - где гарантия, что не переместит? И что будете делать? С кодовым именем в разы надежнее, но опять же не панацея, т.к. лист может быть удален и потом создан заново. По сути я советовал бы озаботиться правильной защитой структуры файла(если это так важно) или все искать по кодовому имени, что будет надежнее. Т.к. если нужного имени нет - хотя бы неверные данные не попадут в отчет. Но выбирать автору...
Если пользователь может переименовать лист - где гарантия, что не переместит? И что будете делать? С кодовым именем в разы надежнее, но опять же не панацея, т.к. лист может быть удален и потом создан заново. По сути я советовал бы озаботиться правильной защитой структуры файла(если это так важно) или все искать по кодовому имени, что будет надежнее. Т.к. если нужного имени нет - хотя бы неверные данные не попадут в отчет. Но выбирать автору...
А вернуть имя листа по индексу можно запросом.The_Prist
Errare humanum est, stultum est in errore perseverare
Сообщение отредактировал The_Prist - Среда, 24.09.2014, 19:07