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 2

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 в имя рабочей книги. Этот гарантирует, что вы ссылаетесь на правильную книгу независимо от значение свойства скрыть расширения.


HideExtensions


Подробнее из cpearson.com для расширений файлов и их последствий в кодировании VBA