Excel VBA требует расширения файла для ссылки на книгу в некоторых системах
У меня есть простой excel VBA, который ссылается на несколько файлов и копирует информацию в мастер перед обработкой. При построении этого на моей собственной системе ссылка на рабочую книгу (прекрасно работающую) была написана следующим образом:
Workbooks("key").Sheets("Sheet1").Range("A1:X57").Copy
Здесь ключом является a .xlsx файл
При использовании этого в другой системе это не работает, и он явно требует расширения файла в каждом вызове.
Workbooks("key.xlsx").Sheets("Sheet1").Range("A1:X57").Copy
Для меня не было бы чрезвычайно трудно сделать это изменение, хотя я хотел понять, почему это происходит и могу ли я определить вариант (угадать!) что не потребует от меня этого?
Почему существуют различия в поведении различных систем при выполнении одного и того же сценария?
Любая помощь была бы очень признательна. Для меня это похоже на то, что VBA имеет свой собственный разум.1 ответ:
Если
key.xlsx
файл сохраняется на обеих системах, включая расширение файла при обращении к объектамWorkbook является более безопасным вариантом из-за установки Windows hide extensions:
Объект Коллекции Рабочих Книг
Если параметр скрыть расширения не действует (имеется в виду, что расширения действительно отображаются в Windows), вы должны включить xls расширение при ссылке на книгу в коллекциирабочих книг . Например, если вы открыли книгу с именем Book1.xls , Вы должны использовать
Workbooks("Book1.xls").Activate
Вместо
Workbooks("Book1").Activate
Обратиться к книге Book1. Вторая строка кода выше, без расширение xls , завершится ошибкой 9, индекс вне диапазона , потому что нет книги с именем Book1 . Если скрыть extensions установка эффекта, вы можете опустить расширение xls и использовать любая из следующих строк кода.
Workbooks("Book1").Activate
Workbooks("Book1.xls").Activate
Эти строки кода предполагают, что вы не открыли оба несохраненных файла. книга с именем Book1 и сохраненная книга с именем Книга 1.xls . С включенным параметром скрыть расширения (так что расширения скрыты в Windows), две строки кода выше функционально эквивалентный. Как вопрос хорошей практики программирования, вы всегда следует включать расширение xls в имя рабочей книги. Этот гарантирует, что вы ссылаетесь на правильную книгу независимо от значение свойства скрыть расширения.
Подробнее из cpearson.com для расширений файлов и их последствий в кодировании VBA