VBA의 이상한 동작을 이해하려고합니다. 인터페이스를 상속하고 COM에 노출 된 두 개의 .NET 클래스가 있습니다. 내가 COM interop에 등록하고 VBA에서 개체가 잘못된 인터페이스에서 유형을 표시하는 이상한 동작이 발생합니다. 그럼 아래 코드 설명 :.NET 형식이 VBA에서 잘못 노출됨
는C# 클래스는 :
엑셀 VBA에서namespace ComTest
{
[ComDefaultInterface(typeof(ITestClass))]
[ClassInterface(ClassInterfaceType.None)]
public class TestClass : ITestClass
{
public string TestMethod()
{
return "Version 2-PROD Version";
}
}
[ComDefaultInterface(typeof(ITestTrade))]
[ClassInterface(ClassInterfaceType.None)]
public class TestTrade : ITestTrade
{
public string TradeName { get; set; }
public int QuantityNumber { get; set; }
}
}
: 나는 'ComTest'을 제거하고 단순히 클래스 이름을 사용하는 경우
는Dim objTestClass As ComTest.TestClass
Set objTestClass = New ComTest.TestClass
Dim str As String
objTestClass. ---> I GET ITestTrade methods in objTestClass
Dim tTestTrade As ComTest.TestTrade
Set tTestTrade = New ComTest.TestTrade
tTestTrade. -----> I GET ITestClass methods in tTestTrade
그러나,이 잘 작동합니다 . 즉,
Dim objTestClass As TestClass
Set objTestClass = New TestClass
Dim str As String
objTestClass. ---> I GET ITestClass types
Dim tTestTrade As TestTrade
Set tTestTrade = New TestTrade
tTestTrade. -----> I GET ITestTrade
누군가 이해해 주시겠습니까?
이것은 VBA 편집기의 버그 여야합니다. 해결 방법이 있습니다. –
그렇게 생각하지 마십시오. 이 클래스는 다른 클래스 인터페이스에서도 나에게 일어나고 있기 때문에 복제하고 잘 찾은 것입니까? 나는 tlbs가 적절한 인터페이스 유형으로 생성되지 않을 것으로 의심합니다. –
나는 최근에 같은 문제가 있었다. 등록 된 것이어야합니다. 나는 모든 guid (글자 그대로 모두) + guid를 어셈블리에서 변경해야했습니다. 얼마 후 문제는 다시 돌아 왔고 모든 guid를 다시 변경하면 도움이되었습니다. – xll