从VBA COM.Interop访问C#类

问题描述 投票:1回答:1

错误:未定义属性让过程,属性获取过程未返回对象vba这是相关代码:

namespace Entities
{
    [Guid("E65658F2-67C4-4F86-890C-62517EFB19AC")]
    [ComVisible(true)]
    public interface IFieldTags
    {
        [DispId(-4)]
        FieldTagsEnumerator GetEnumerator();
    }

    [Guid("472DDF54-E42D-4E6D-9D62-1507CDB2ED0A")]
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [ComVisible(true)]
    public class FieldTags : IEnumerable, IFieldTags
    {

        private List<FieldTag> fieldTagsList;

        internal FieldTags(Document document, Tools tools)
        {
            this.constants = tools.Constants;
            this.document = document;
            this.fieldTagsList = GetFieldtagList();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return (IEnumerator)GetEnumerator();
        }

        public FieldTagsEnumerator GetEnumerator()
        {
            return new FieldTagsEnumerator(this.fieldTagsList);
        }
    }


    public class FieldTagsEnumerator : IEnumerator
    {
        private readonly List<FieldTag> fieldTagsCollection;
        private int position = -1;

        public FieldTagsEnumerator(List<FieldTag> fieldTagsList)
        {
            fieldTagsCollection = fieldTagsList;
        }
    }
}

使用RegAsm.exe和将Entities.tlb附加到VBA生成的.tlb

在VBA中:

Dim objFieldTags As Entities.IFieldTags
// returns FieldTags type object in c#
Set objFieldTags = objDocument.GetNewRange(WordDocument.Range).FieldTags

For Each obj In objFieldTags

对于每种原因都会导致错误,这种方法正确吗?如何在循环中使用FieldTag?

c# vba com-interop
1个回答
0
投票

我不是专家,但最近为VBA的C#词典包装器解决了此问题。

© www.soinside.com 2019 - 2024. All rights reserved.