Хотя мне нравится 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" )
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 Эндрю Уайтчепел.
Надеюсь, это поможет!
Майк