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

Вход

Регистрация

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

 

= Мир MS Excel/Как назначить переменной одну из нескольких открытых книг - Мир MS Excel

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

2007
Всем доброго дня ! Вопрос такой: есть несколько открытых книг .xlsx (в прикрепленном примере 3). Я среди них нахожу максимальное количество листов в книге и присваиваю это значение в переменную. Потом мне надо в цикле m= 0 до 2 обращаться и работать с каждой из этих книг. Я создаю переменную CurrentFile As Workbook и массив из имен файлов этих книг CurrentFileName(2) As String, нахожу искомое значение и закрываю открытые книги.
Set CurrentFile = Workbooks.Open(CurrentFileName(m)) 'работает
CurrentFile.Close SaveChanges:=False 'работает
Но я хочу обойтись без закрытия книг, чтоб не мелькало на экране. Так как потом их снова открывать в другом цикле, поочереди.

Я пытаюсь назначить переменной CurrentFile конкретную книгу:
Set CurrentFile = Workbooks(CurrentFileName(m)) ' не работает выдает ошибку Run-time error '9' Subscript out of range
Здесь не получается, почему-то...

Что я не так делаю ? Пример прилагаю.
К сообщению приложен файл: proba.xlsm (17.3 Kb) · kniga_2023_10.xlsx (7.8 Kb) · kniga_2023_11.xlsx (7.8 Kb) · kniga_2023_12.xlsx (7.8 Kb)


Сергей

Сообщение отредактировал Serg5876 - Среда, 27.12.2023, 14:56
 
Ответить
СообщениеВсем доброго дня ! Вопрос такой: есть несколько открытых книг .xlsx (в прикрепленном примере 3). Я среди них нахожу максимальное количество листов в книге и присваиваю это значение в переменную. Потом мне надо в цикле m= 0 до 2 обращаться и работать с каждой из этих книг. Я создаю переменную CurrentFile As Workbook и массив из имен файлов этих книг CurrentFileName(2) As String, нахожу искомое значение и закрываю открытые книги.
Set CurrentFile = Workbooks.Open(CurrentFileName(m)) 'работает
CurrentFile.Close SaveChanges:=False 'работает
Но я хочу обойтись без закрытия книг, чтоб не мелькало на экране. Так как потом их снова открывать в другом цикле, поочереди.

Я пытаюсь назначить переменной CurrentFile конкретную книгу:
Set CurrentFile = Workbooks(CurrentFileName(m)) ' не работает выдает ошибку Run-time error '9' Subscript out of range
Здесь не получается, почему-то...

Что я не так делаю ? Пример прилагаю.

Автор - Serg5876
Дата добавления - 27.12.2023 в 14:53
Serge_007 Дата: Среда, 27.12.2023, 15:06 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16452
Репутация: 2746 ±
Замечаний: ±

Excel 2016
Здравствуйте

чтоб не мелькало на экране
Отключить обновление (мерцание) экрана


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте

чтоб не мелькало на экране
Отключить обновление (мерцание) экрана

Автор - Serge_007
Дата добавления - 27.12.2023 в 15:06
Serg5876 Дата: Четверг, 28.12.2023, 11:40 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

2007
Мерцать экран перестал, все работает). Спасибо !
Но, для понимания, если не трудно посмотрите, почему все-таки выдавала ошибку следующая строчка:
Set CurrentFile = Workbooks(CurrentFileName(m)) ' не работает выдает ошибку Run-time error '9' Subscript out of range

Весь текс макроса в приложенном файле Проба.xlsm
К сообщению приложен файл: 5059033.xlsm (15.1 Kb)


Сергей
 
Ответить
СообщениеМерцать экран перестал, все работает). Спасибо !
Но, для понимания, если не трудно посмотрите, почему все-таки выдавала ошибку следующая строчка:
Set CurrentFile = Workbooks(CurrentFileName(m)) ' не работает выдает ошибку Run-time error '9' Subscript out of range

Весь текс макроса в приложенном файле Проба.xlsm

Автор - Serg5876
Дата добавления - 28.12.2023 в 11:40
i691198 Дата: Четверг, 28.12.2023, 21:04 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 198
Репутация: 82 ±
Замечаний: 0% ±

Добрый вечер. Во втором цикле вы обращаетесь к уже открытым файлам, поэтому не нужно в имени файла указывать путь.
Вместо [vba]
Код
CurrentFileName(m) = PrimaryData.Path & "\Книга " & CurYear & "_" & CurMonth & ".xlsx"
[/vba]
должно быть [vba]
Код
CurrentFileName(m) = "Книга " & CurYear & "_" & CurMonth & ".xlsx"
[/vba]
Еще одно замечание. Второй цикл правильно сработает только один раз, дальше будет ошибка. В конце цикла нужна строка [vba]
Код
CurMonth = PrimaryData.Worksheets(1).Range("F1")
[/vba]


Сообщение отредактировал i691198 - Четверг, 28.12.2023, 21:37
 
Ответить
СообщениеДобрый вечер. Во втором цикле вы обращаетесь к уже открытым файлам, поэтому не нужно в имени файла указывать путь.
Вместо [vba]
Код
CurrentFileName(m) = PrimaryData.Path & "\Книга " & CurYear & "_" & CurMonth & ".xlsx"
[/vba]
должно быть [vba]
Код
CurrentFileName(m) = "Книга " & CurYear & "_" & CurMonth & ".xlsx"
[/vba]
Еще одно замечание. Второй цикл правильно сработает только один раз, дальше будет ошибка. В конце цикла нужна строка [vba]
Код
CurMonth = PrimaryData.Worksheets(1).Range("F1")
[/vba]

Автор - i691198
Дата добавления - 28.12.2023 в 21:04
Serg5876 Дата: Четверг, 11.01.2024, 13:20 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

2007
Добрый день ! Учел ваши замечания, все работает красиво ! В первом цикле файлы открываются для обработки, а во втором последовательно обрабатываются и закрываются по-очереди, убрал добавление пути PrimaryData.Path по вашему совету и при присвоении переменной имени открытой книги изменил метод:
Set CurrentFile = Workbooks.Open(CurrentFileName(m)) было
Set CurrentFile = Workbooks(CurrentFileName(m)) стало. Так как книги уже открыты в первом цикле.
Насчет последней строчки вашего ответа - вы как в воду глядели)), у меня эта строчка в моем коде есть))

CurMonth = PrimaryData.Worksheets(1).Range("F1")

Спасибо за участие и разъяснения ! А то чувствовал себя полным кретином))


Сергей

Сообщение отредактировал Serg5876 - Четверг, 11.01.2024, 13:26
 
Ответить
СообщениеДобрый день ! Учел ваши замечания, все работает красиво ! В первом цикле файлы открываются для обработки, а во втором последовательно обрабатываются и закрываются по-очереди, убрал добавление пути PrimaryData.Path по вашему совету и при присвоении переменной имени открытой книги изменил метод:
Set CurrentFile = Workbooks.Open(CurrentFileName(m)) было
Set CurrentFile = Workbooks(CurrentFileName(m)) стало. Так как книги уже открыты в первом цикле.
Насчет последней строчки вашего ответа - вы как в воду глядели)), у меня эта строчка в моем коде есть))

CurMonth = PrimaryData.Worksheets(1).Range("F1")

Спасибо за участие и разъяснения ! А то чувствовал себя полным кретином))

Автор - Serg5876
Дата добавления - 11.01.2024 в 13:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как назначить переменной одну из нескольких открытых книг (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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