繁体   English   中英

将Word文档用户表单复制到另一个

[英]Copy Word document Userform to another

我下面有这段代码可将VBA代码从一个Word文档复制到另一个(我正在使用C#)。 它适用于模块,但我似乎无法使用userforms。

VBComponent sourceVBC = GetSourceDocVB();
VBComponent targetVBC = document.VBProject.VBComponents.Add(sourceVBC.Type);
string codes = sourceVBC.CodeModule.get_Lines(1, sourceVBC.CodeModule.CountOfLines);
targetVBC.CodeModule.AddFromString(codes);
targetVBC.Name = sourceVBC.Name;

是的,用户表单已复制到目标文档,但其字段未复制。 就像它包含标签和文本框一样。 这些字段不会被复制。 我在这里错过了什么吗?

是的,你错过了什么。 表单不仅在代码文件中定义,而且还需要一个二进制文件。 您没有告诉任何有关源文件生成方式的信息。 通常,在VBA中,您使用VBComponent对象的“Export”语句。 当然,可以通过转到Word中的VBA编辑器手动执行此操作,右键单击项目组件并选择“导出”。 如果您查看导出文件夹,您将看到一个表单被保存为两个文件“Form1.frm”(包含代码)和“Form1.frx”(包含二进制表单数据,作为标签和其他内容) 。 在另一个项目中,您可以单独使用File,Import函数,如果您导入表单,它将处理二进制定义。

在VBA中,您可以使用类似的东西从项目中导出:

For Each vbC In ActiveDocument.VBProject.VBComponents
  Select Case vbC.Type

    Case vbext_ct_StdModule
        strVbcExt = ".bas"
    Case vbext_ct_ClassModule
        strVbcExt = ".cls"
    Case vbext_ct_MSForm
        strVbcExt = ".frm"
    Case Else
  End Select

  strvbCName = vbC.Name
  strFilename = strPath & "\" & strvbCName & strVbcExt
  vbC.Export strFilename
(omitted the rest)

并导入你将使用

ActiveDocument.VBProject.VBComponents.Import strFilename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM