Исключение при доступе к Globals.ThisAddIn.Application в VSTO AddIn - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь создать MS Office VSTO AddIn, используя C#. Надстройка содержит ленту, которую я добавил через конструктор лент в VS19.

Я оставил файл ThisAddin.cs без изменений:

namespace MyAddIn
{
    public partial class ThisAddIn
    {

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {

        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}

На ленте я добавил кнопку и написал несколько код, который будет выполняться при нажатии:

namespace MyAddIn
{
    public partial class my_ribbon
    {
        private void my_ribbon_Load(object sender, RibbonUIEventArgs e)
        {

        }

        private void btn_myButton_Click(object sender, RibbonControlEventArgs e)
        {
            MessageBox.Show(Globals.ThisAddIn.Application.ThisWorkbook.FullName);
        }
    }
}

Однако всякий раз, когда я нажимаю на кнопку, C# выдает мне следующее исключение:

System.Runtime.InteropServices.COMException
  HResult=0x800A03EC
  Message=Ausnahme von HRESULT: 0x800A03EC
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>

Во время отладки я видел, что Globals.ThisWorkbook.Application скинул ошибку. Я обнаружил, что 0x800A03EC - это код ошибки для Name-Not-Found (согласно this ). Но когда я нажимаю кнопку после открытия файла, должен появиться объект приложения с полным именем.

Я также взглянул на это руководство , но это не помогло много, потому что они также используют Globals.ThisWorkbook.Application, но успешно.

Есть ли у вас какие-либо советы о том, как это исправить? (Требуется больше кода инициализации, и т. Д. c?)

1 Ответ

0 голосов
/ 18 января 2020

@ Синди Мейстер указал мне правильное направление:

На самом деле я пишу надстройку уровня приложения вместо настройки уровня документа и поэтому не имею ThisWorkbook. Мне нужно было посмотреть Globals.ThisAddIn.Application.ActiveWorkbook (поэтому экземпляр книги, где был вызван щелчок).

Замена ThisWorkbook на ActiveWorkbook сделала свое дело.

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