1

我在下面有这段代码可以将 VBA 代码从一个 word 文档复制到另一个(我使用的是 C#)。它适用于模块,但我似乎无法让它与用户表单一起使用。

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;

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

4

1 回答 1

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
于 2012-02-22T04:09:14.320 回答