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

发布于 2025-01-06 10:55:28 字数 459 浏览 1 评论 0原文

我使用下面的代码将 VBA 代码从一个 Word 文档复制到另一个 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;

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

I have this code below to copy VBA codes from one word document to another (I'm using C#). It works for modules however I can't seem to get it to work with 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;

Yes, the userform is copied to the target document but its fields are not. Like if it contains labels and textboxes. Those fields are not copied. Am I missing something here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囚我心虐我身 2025-01-13 10:55:28

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

在 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

Yes, you are missing something. Forms are not defined in the code file only, but need a binary file too.
You don't tell anything about the way the source files are generated. Normally, in VBA, you use the "Export" statement of the VBComponent object. Of course one can do it manually by going to the VBA Editor in Word, right-clicks the project component and selects "Export". If you have a look into the export folder, you'll see that a form is saved as two files "Form1.frm" (containing the code) and "Form1.frx" (containing binary form data, as labels and other stuff).
In the other project, you can use maually the File, Import function, which takes care of the binary definition if you import a form.

In VBA, you may use something like this to export from a project:

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)

And to import you'll use

ActiveDocument.VBProject.VBComponents.Import strFilename
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文