Пользовательская функция в Excel с использованием VBA, которая работает в любом совпадении

Я создал пользовательскую функцию через VBA в Excel. Если я использую его на своем компьютере, он работает нормально, но если я изменю файл на другой компьютер (где этот компьютер также имеет созданную функцию), он не будет работать. Я должен изменить путь созданной функции. Есть ли способ не менять путь каждый раз, когда я копирую файл на другой компьютер?

='C:\Users\Usuario1\Documents\Complementos\BondsTIRMDuration.xlam'!TIrbonds($A2;F2;'C:\Users\Usuario1\Documents\Complementos\AsBusinessDay.xlam'!asbusinessday('C:\Users\Usuario1\Documents\Complementos\AsBusinessDay.xlam'!PrevBusinessDay(HOY())))*100

3 ответа

Просто сохраните вашу надстройку в правильном пути на каждом компьютере.

Это должно быть что-то вроде:

C:\Users\YOURNAME\AppData\Roaming\Microsoft\AddIns\

См. Установка и использование надстроек Excel, чтобы определить правильный путь.

Если ваша надстройка установлена ​​правильно, вы сможете запускать пользовательскую функцию без пути.

  1. Решение 1: Вы можете использовать общие пути на обоих компьютерах
    (например: C:\work, C:\Work2)
  2. Решение 2: Вы можете поместить все файлы в один и тот же путь (C:\work), тогда вам нужно только указать имя файла

    ='BondsTIRMDuration.xlam' TIrbonds! ($A2;F2;'AsBusinessDay.xlam' asbusinessday('AsBusinessDay.xlam' PrevBusinessDay(HOY()))!)*100

Вы можете вызвать специальную папку с приложением.

MsgBox Application.DefaultFilePath

Этот пример будет: C:\Users\Usuario1\Documents

'Here are a few VBA path functions
    MsgBox Application.Path
    MsgBox Application.DefaultFilePath
    MsgBox Application.TemplatesPath
    MsgBox Application.StartupPath
    MsgBox Application.UserLibraryPath
    MsgBox Application.LibraryPath

Вы также можете создать объект wscrit для вызова других путей, например:

 MsgBox CreateObject("Wscript.Shell").SpecialFolders("Desktop")

Примеры папок для объекта Wscript.shell:

AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Programs
Recent
SendTo
StartMenu
Startup
Templates

И выполните макрос следующим образом (всегда нужно использовать один и тот же каталог):

Sub Macro()
    AddIns.Add Filename:=Application.DefaultFilePath & "\Complement.xlam"
    AddIns("Complement").Installed = True
End Sub
Другие вопросы по тегам