/ / Непортативна поведінка макросів Excel VBA - excel-vba, excel-2010, vba, excel

Не портативна поведінка макросів Excel VBA - excel-vba, excel-2010, vba, excel

Я використовую Excel 2010 і додаю невеликий макрос VBAдо електронної таблиці. (Призначення макросу - взяти дані на активному аркуші та експортувати їх у файл CSV, але це дотично до питання.) Макрос визначає вихідний шлях до файлу, використовуючи ThisWorkbook.Path. Я також додав спеціальну кнопку на панель швидкого доступу, щоб активувати макрос.

Отримавши робочий алгоритм на місці векспериментальної таблиці (Test.xlsm, що зберігається в одному шляху), я зробив копію електронної таблиці в іншому шляху і перейменував її на _Database.xlsm. Потім я відкрив _Database.xlsm і запустив макрос. На мій подив, файл було записано на початковий шлях, а не на новий. І, подивившись на панель інструментів Windows, я побачив, що Excel також відкрив оригінальний файл у своєму початковому шляху.

Після численних хитрощів з налаштуваннями коду,перевіряючи властивості та подібні, я нарешті виявив, що можу запобігти цьому, відкривши скопійовану електронну таблицю, видаливши кнопку панелі швидкого доступу, повторно додавши її та збереживши файл. Мої запитання:

  1. Чому макрос не є "самостійно переносним" разом із електронною таблицею? Тобто, чому копія підтримує такий тип прив'язки до оригінального аркуша?

  2. Чи можу я створити або змінити макрос, щоб зробити його портативним у цьому сенсі?

Відповіді:

1 для відповіді № 1

Якщо ви хочете, щоб панель інструментів / кнопка подорожувала за допомогоюфайл (тобто не завжди посилання назад на оригінальну версію), тоді вам потрібно додати його до самого файлу, а не до QAT. QAT "знає" лише про фактичний файл, до якого ви прив'язали кнопку.

Можливо, було б краще додати макрос до своєї особистої книги макросів, а потім просто дати йому працювати на ActiveWorkbook.

Однак, якщо ви хочете поширити його серед інших користувачів, ви можете зберегти макрос у книзі "база даних" і додати спеціальну частину стрічки. Подивитися: http://www.rondebruin.nl/win/s2/win001.htm