2014-10-20 2 views
0

У меня есть графический интерфейс, который я написал на C#. Это сетка интерактивных кнопок и текста, которая управляет картой регистров. Я хотел бы создать API для этого графического интерфейса для использования в Excel vba. Я не смог найти никаких примеров или документации о том, как создать такую ​​вещь, но раньше я использовал библиотеки объектов других компаний.Создать библиотеку объектов для Excel vba

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

Excel VBA код:

Sub Test() 
    Dim impclass As New ZZVISIBLE_FROM_EXCEL_CLASS 
    MsgBox impclass.DotNetMethod_SQR(5) 
End Sub 

C# Библиотека классов Код:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace ZZVISIBLE_FROM_EXCEL_LIBRARY 
{ 
    public class ZZVISIBLE_FROM_EXCEL_CLASS 
    { 
     public Double DotNetMethod_SQR(Double input) 
     { 
      return input * input; 
     } 
    } 
} 

Этот основополагающий пример использует C класс # библиотека квадратуры числа и Excel VBA, чтобы выбрать номер 5. Это базовые рамки для последующих вещей, которые я хотел бы сделать, такие как:

grid.writecell(22,1001)

grid.getcell(22)

grid.resetall()

grid.loadfile("C:\griddata\config_default")

enter image description here

Некоторые ссылки для создания этих библиотек объектов или даже то, что они называют бы очень полезно! Googling «custom excel vba reference in C#» до сих пор не принес ничего полезного, поэтому я решил отправить здесь помощь.

Кроме того, я достаточно рано в проекте, что «вы делаете это неправильно, делайте это» ответы типа приветствуются!

+0

вы можете не сделать то же самое в C# с помощью 'Microsoft.Interop.Excel' вы пытались Google примеров по использованию Interop ..? – MethodMan

+0

Замечательный комментарий! К сожалению, причина, по которой я делаю это, - поддерживать совместимость с кодом, написанным в Excel VBA. – SwimBikeRun

ответ

1

Прежде всего, вам нужно знать версию Dotnet вы работаете, так что вы используете либо: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe или C: \ Windows \ Microsoft .NET \ Framework \ v4.0.30319 \ RegAsm.exe

Во-вторых, вам нужно знать, хотите ли вы регистрировать DLL как 32-разрядные или 64-разрядные, поэтому используйте один и тот же предыдущий путь для 32-разрядного или просто используйте Framework64 вместо Framework в случае 64 бит

после завершения вы можете добавить ссылку на эту сборку легко в своем сценарии vba следующим образом: enter image description here

однажды добавил вы можете создать экземпляр любого входа в инстансе любого класса существует в библиотеке DLL

2

У вас есть несколько вариантов:

1) Создание сборки и сделать его COM просматриваться с помощью Regasm

См статью CodeProject

http://www.codeproject.com/Articles/555660/Extend-your-VBA-code-with-Csharp-VB-NET-or-Cpluspl

2) Для того, чтобы сделать C# сбоку, видимой в Excel, вы должны сделать его COM видимым и установить для ReferenceAssemblyFromVbaProject значение true.

Пожалуйста, обратитесь к следующей статье MSDN для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/bb608604.aspx

Спасибо, Кевин

+0

Хороший совет, но это не решило проблему развертывания. Только мой компьютер запускает его. Как я должен использовать это как инструмент, который могут использовать другие люди? – SwimBikeRun

+0

@SwimBikeRun ответ прямо там - используйте 'regasm' для регистрации' .dll' и '.tlb' на других машинах. Перед развертыванием убедитесь, что вы настроили таргетинг на правильную платформу. –

+0

Как vba4all сказал, что вы можете использовать regasm, вы также можете написать .NET Installer http://stackoverflow.com/questions/2378730/register-a-c-vb-net-com-dll-programatically Вам понадобятся права администратора в любом случае. – Kevin

0

Вы можете обернуть вашу библиотеку в Excel-DNA надстройки. (Excel-DNA - бесплатная библиотека, которую я разрабатываю для интеграции .NET с Excel). Это может облегчить проблемы с регистрацией с помощью COM (позволяя вам развернуть режим COM-объекта, не требуя разрешения администратора).

Это также поможет, если вы хотите открыть некоторые функции в качестве пользовательской функции, которую вы можете вызывать на листе в Excel, добавить ленту или что-то в этом роде.

Для использования Excel-ДНК подвергать объектную модель к VBA, я предложить эти сообщения от Mikael Katajamäki в качестве отправной точки:

Для общего Excel-ДНК поддержка Я предлагаю вам использовать Excel-DNA Google group.