Удалить конструктор. VBA не может их использовать, и c# будет прозрачно реализовывать конструктор по умолчанию.
Затем попробуйте в классе
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ITools))]
и в интерфейсе
Просто
[ComVisible(true)]
Затем в VBA
Dim objElement as Tools
set objElement = new Tools
у меня есть класс C#, к которому я обращаюсь из VBA, и это единственный найденный мной способ, который дает intellisense в VBA и по-прежнему позволяет такие элементы, как GetEnumerator для правильной работы.
Kvp C# оболочка словаря для VBA
Вы также должны знать, что если в вашем классе есть индексатор, то синтаксис .Item [x] будет только работать, если вы решили не иметь intellisense. Если у вас есть intellisense, то использование .Item [x] = value приведет к ошибке VBA из-за ошибки в создании промежуточного языка для индексатора.