Доступ к прикладному дополнению VSTO вводит от VBA (Excel)

Хотя мне нравится Dave Markle ответ, (и я вижу, что Вы сделали также, так как Вы отметили его как свой ответ), тот метод может перестать работать, если Вы имеете, включает Вашу базу данных, тот контрольный CUD операции, и Ваша контрольная таблица имеет столбец IDENTITY. Это возвратило бы значение идентификационных данных таблицы Audit, не таблица Вы просто вставили в, так как контрольная таблица на самом деле происходит после.

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

пример:

@"DECLARE @tmp AS TABLE ( id int )
                    INSERT INTO case
                    (
                        caseID,
                        partID,
                        serialNumber,
                        hardware,
                        software,
                        firmware
                    )
                    OUTPUT Inserted.ID into @tmp
                    VALUES
                    (
                        @caseID,
                        @partItemID,
                        @serialNumber,
                        @hardware,
                        @software,
                        @firmware
                    )
                Select ID from @tmp" )

14
задан Kang Su 24 September 2009 в 21:17
поделиться

1 ответ

VSTO не является DLL, которую обычно можно вызвать из других DLL. VSTO - это, по сути, код .NET, доступный для COM, работающий из оболочки, работающей из отдельного домена приложений. Хотя ваша надстройка VSTO технически представляет собой DLL, загружаемую в Excel, она работает больше как EXE верхнего уровня, чем как библиотека DLL, доступная для других вызывающих.

Лично я бы создал стандартную сборку .NET. - то есть избегайте использования VSTO для этого - и предоставьте его COM, используя правильные атрибуты. Этот процесс хорошо объясняется здесь: COM Interop Exposed - Part 2 , в разделе «Предоставление событий .NET для COM».

Если вы действительно настаиваете на том, чтобы VBA мог вызывать VSTO, вам придется действовать через свойство Office.COMAddIn.Object , которое активируется путем переопределения RequestComAddInAutomationService метод. Этот процесс подробно обсуждается в статье Надстройки VSTO, COMAddIns и RequestComAddInAutomationService Эндрю Уайтчепел.

Надеюсь, это поможет!

Майк

12
ответ дан 1 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: