Я могу создать надстройку кода, установив для свойства книги .IsAddin значение True и сохранив его в формате * xlam.
Затем я могу добавить его в качестве ссылки налюбая другая рабочая книга как таковая:
Sub Test()
Dim wb As Workbook
Set wb = Workbooks.Add
wb.VBProject.References.AddFromFile "PathToAddIn.xlam"
End Sub
После этого процедуры кода надстройки будут доступны для вызова из основной рабочей книги wb.
Однако что если при запуске процедуры вНадстройка, я хочу получить объект книги из книги, которая ссылается на надстройку ?
Например, что-то вроде этого:
Sub ThisProcedureIsWithinTheAddIn()
Debug.Print ThisWorkbook.Path ' Returns the path of this add-in (xlam) file
Dim ReferringWorkbook As Workbook
Set ReferringWorkbook = ThisWorkbook... ' How does one reference the caller/referrer?
End Sub
ДляЦель этого вопроса - предположить, что выполнение кода находится в совершенно отдельном потоке, а объект wb (как он был изначально создан) больше не существует как переменная.На самом деле, в моем приложении wb был создан в совершенно отдельном новом приложении Excel. Приложение .
. Я понимаю, что могу просмотреть каждую книгу в приложении с помощью For Each wb.В Application.Workbooks и найдите соответствующий критерий соответствия.Но это грязное решение.Есть ли что-нибудь более элегантное?