Пользовательская функция в Excel с использованием VBA, которая работает в любом совпадении - PullRequest
0 голосов
/ 07 января 2019

Я создал пользовательскую функцию через 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 ]

0 голосов
/ 08 января 2019

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

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

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

См. Установка и использование надстроек Excel для определения правильного пути.

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

0 голосов
/ 08 января 2019

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

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
0 голосов
/ 07 января 2019
  1. Решение 1: Вы можете использовать общие пути на обоих компьютерах
    (например: C: \ work, C: \ Work2)
  2. Решение 2. Вы можете поместить все файлы в один и тот же путь (C: \ work), тогда вам нужно только указать имя файла

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...