2010-06-08 5 views
0

Excel에서 사용할 .net 개체가 있습니다. 이 개체를 호출하려면 변경할 필요가 기존 VBA 스크립트가 있습니다. 그런 다음 객체를 TLB로 변환했습니다. 나는이 분야에 대해 실제로 만진 적이 없기 때문에 도움을 얻을 수 있습니다.Excel VBA 양식에서 C# .net 개체 사용

내가 인터페이스

[Guid("0F700B48-E0CA-446b-B87E-555BCC317D74"),InterfaceType(ComInterfaceType.InterfaceIsDual)] 
public interface IOfficeCOMInterface 
{ 

    [DispId(1)] 
    void ResetOrder(); 
    [DispId(2)] 
    void SetDeliveryAddress(string PostalName, string AddressLine1, string AddressLine2, string AddressLine3, string AddressLine4, string PostCode, string CountryCode, string TelephoneNo, string FaxNo, string EmailAddress); 
} 

을 만든 또한 그 객체를 상속 클래스를 만들었습니다.

[ClassInterface(ClassInterfaceType.None), ProgId("NAMESPACE.OfficeCOMInterface"), Guid("9D9723F9-8CF1-4834-BE69-C3FEAAAAB530"), ComVisible(true)] 
public class OfficeCOMInterface : IOfficeCOMInterface, IDisposable 
{ 
public void ResetSOPOrder() 
    { 

    } 
public void SetDeliveryAddress(string PostalName, string AddressLine1, string AddressLine2, string AddressLine3, string AddressLine4, string PostCode, string CountryCode, string TelephoneNo, string FaxNo, string EmailAddress) 
    { 

     try 
     { 
      SalesOrder.AmendDeliveryAddress(PostalName, AddressLine1, AddressLine2, AddressLine3, AddressLine4, PostCode); 

      MessageBox.Show("Delivery address set"); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 
} 

처분에서 벗어난 개체 방법에 액세스 할 수 없습니다. 내가해야 할 일이 있습니까?

+0

질문을 잊어 버렸습니다. –

+0

죄송합니다. 지금 추가했습니다. 미리 감사드립니다. –

답변

1

다음 단계는 작동합니다 :

  1. 은 DLL을 컴파일합니다.
  2. C# DLL을 GAC에 넣지 않으려면 regasm /tlb (또는 regasm /codebase /tlb)을 사용하여 TLB를 만들고이를 COM 개체로 등록하십시오.
  3. 다른 COM 개체를 인스턴스화하는 것처럼 Excel VBA에서 개체를 인스턴스화합니다. 이 작업을 수행하려면 다음 중 하나를 수행 할 수 있습니다 :

    • 사용 초기 바인딩 : Set myObject = CreateObject("NAMESPACE.OfficeCOMInterface")
    : 사용 후 참조를 필요로하지 않습니다 후기 바인딩 Set myObject = New NAMESPACE.OfficeCOMInterface 또는
  4. 사용, 엑셀에서 TLB에 대한 참조를 추가하고

    첫 번째 옵션은 개발하기 쉽고 두 번째 옵션은 배포하기가 쉽습니다.

  5. VBA에서 개체를 사용하십시오 : myObject.ResetSOPOrder.

+0

안녕하세요, 비록 IDisposable에서 제공해야하는 dispose 메서드 만 사용할 수 있지만 답변을 많이 주셔서 감사합니다. 내 인터페이스가 틀렸어 야합니다. 이유는 확실하지 않습니다. 어떤 이유가있을 것입니다. 인스턴스가 public이며, 속성과 관련이 있는지 확실하지 않습니다. –