none
VBA引用由.dll注册的.tlb文件问题 RRS feed

  • 问题

  • 基本描述:
    vba 环境下,调用由Class Library (如 Library) Build 的的Com组件(.tlb),其中该类库引用了itextsharp.dll
    本机由于安装Visual Studio环境并进行开发,并已将Class Library Properties- Build-Register for Com interop进行了勾选。Build后自动生成Library.dllLibrary.tlb文件,供VBA调用.tlb文件。

    本机操作过程(没有问题):
    .NET :类库引用itextsharp.dll,在类库中添加方法(供生成.tlb文件后VBA调用)。Build后生成Library.dll和Library.tlb,同时bin下有itextsharp.dll
    VBA:Marco.xlsm Module中只引用Library.tlb,添加主要代码段如:dim o as new Library;在本机(Win7 , .net 4)运行VBA的代码是没有问题的;

    客户电脑(出现问题):
    但是,我将bin下的内容(itextsharp.dll,Library.dll和Library.tlb) 放到客户机,在客户机器(Win7, .net 4)环境运行VBA代码时,出现引用的Library未注册等错误(后来我重新注册了regasm.exe "D:\Code\Library.dll" /tlb 后再由VBA引用,不再出现为注册提示;但是会出现另一个错误提示,具体提示忘记了。)

    请问:上述问题的产生是否是注册上引起的?我的感觉是Library.tlb未将itextsharp.dll连带引用上。如果有好的方案,烦请多留几笔字。

          

    2013年3月21日 16:21

全部回复

  • 代码部分:
    namespace Library
    {
            public class PDFTOTXT : IPDFTOTXT
                {

                    public PDFTOTXT() { }

                    public int PdfPages(String vPdfFilePath)
                    {
                        PDFParser pdfParser = new PDFParser();
                        return pdfParser.PdfPages(vPdfFilePath);
                    }
            }

            using iTextSharp.text.pdf;
            public class PDFParser
                { 

                   public int PdfPages(String inFileName)
                    {
                        try
                        {
                            PdfReader reader = new PdfReader(inFileName);
                            return reader.NumberOfPages;
                        }
                        catch
                        {
                            return 0;
                        }
                    }
            }
    }

    VBA部分:

    引用Library.dll注册后的Library.tlb组件
    Sub Test

          Dim i as long
          Dim o as new Library.PDFTOTXT

          i=o.PdfPages("FileFullPath......")

    End Sub

    结果:第一次o.PdfPages出现错误未注册提示,重新regasm.exe "D:\Code\Library.dll" /tlb 后再由VBA引用Library.tlb,出现Automation 错误提示。 我比较倾向怀疑iTextSharp.dll未注册上,针对这种情况,是我的苦恼之处。



    2013年3月21日 16:54