将Word文档Userform复制到另一个

时间:2012-02-17 05:04:16

标签: c# vba ms-word userform

我有以下代码将VBA代码从一个word文档复制到另一个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;

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

1 个答案:

答案 0 :(得分:3)

是的,你错过了一些东西。表单只在代码文件中定义,但也需要二进制文件。 您没有告诉任何有关源文件生成方式的信息。通常,在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