Настраиваемая область задач: как перехватить изменение видимости рабочих листов Excel из надстройки? - PullRequest
1 голос
/ 08 апреля 2020

DataGridView заполнен рабочими листами и его видимость Статус:

У меня есть настраиваемая панель задач для надстроек Excel с DataGridView, которую я заполняю из моей открытой рабочей книги:

  1. Его содержимое все листы открытой рабочей книги.
  2. Строки являются видимыми или не основаны на статусе видимости Рабочих листов (видимый / скрытый / SuperHidden).

Перехват изменений видимости Рабочих листов от Addin?

У меня есть Операции / задачи, выполняемые в книге Excel, которые выполняет пользователь, которые могут отображать / скрывать таблицы в зависимости от того, что он / она делает. Итак,

  • Нужно ли перехватить определенное событие рабочей книги для этого? (Буду признателен за пример, если это предложенное решение, пожалуйста)
  • Нужно ли вызывать подпрограмму / функцию надстройки из Excel после выполнения задачи? (Я был бы признателен, как я могу это сделать, если это то, что вы предлагаете также, пожалуйста) только в определенных случаях (действия пользователей). И только тогда мне нужно обновить список рабочих таблиц DataGridView Visible.

Ваши предложения / рекомендации по этому вопросу очень ценятся. Пожалуйста, дайте мне знать, если вам когда-нибудь понадобится дополнительная информация, я буду рад обновить этот пост или ответить вам в комментариях.

1 Ответ

1 голос
/ 13 апреля 2020

Вам лучше вызвать Add-in void прямо из вашего Excel:

using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;

namespace YourSolution
{
    [ComVisible(true)]
    public interface IAddInUtilities
    {
        //You have to implement this
        void YourFunctionToCall();
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        //Implemntation: Call this from your Excel
        public void YourFunctionToCall()
        {
             //The Operation here ...
        }
    }
}

Затем из вашего Excel VBA используйте этот Sub:

Public Sub FunctionCallableInVBA()
    Dim addIn As COMAddIn
    Dim automationObject As Object
    Set addIn = Application.COMAddIns("YourSolution")
    Set automationObject = addIn.Object

    'Call the Function your shared on the COM
    automationObject.YourFunctionToCall()

    Set addIn = Nothing
    Set automationObject = Nothing
End Sub

Это должно решите свою проблему и избегайте отчаянного поиска этого существующего события скрытия / отображения.

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