在Word VBA中加载表单时如何修复错误432?

时间:2015-11-23 08:52:36

标签: vba ms-word word-vba

我有一个Word .dot文件,可以在旧版本的Word中运行,但在Word 2013中运行时失败,错误432。

当我调试代码时,我有一行:

Load customerForm

VBA显示错误:

Run-time error '432': File name or class name not found during Automation operation

该项目" pennyscode"包括"模块1和#34;其中包含正在调试的函数," ThisDocument"以及一个名为" customerForm"。

的表格

我尝试将名称更改为" pennyscode.customerForm"但这并没有任何区别。

从Sub_函数调用此代码,该函数从Document_New()调用。

  

更新

我可以在Load customerForm行上放置一个断点,并证明它是引起问题的行。如果此时我将鼠标移到" customerForm" VBA提出了

customerForm = <Object variable or With block variable not set>

如果我删除/跳过加载行,则下一行是customerForm.Show,并产生相同的错误。

如果我只打开.dotm文件然后使用Alt-F11打开VBA,我可以查看selectCustomer的代码,列表属性/方法和customerForm出现在列表中。

附加说明 我相信在Load函数中它必须调用GetObject,这就是失败。就好像VBA无法找到customerForm对象,即使它出现在项目中。

我已经在下面的Document_New中发布了正在调用的函数的完整代码。

Sub selectCustomer()
    Dim Doc As Document
    Set Doc = Application.ActiveDocument
    If Doc.CustomDocumentProperties.Item("Customer") = "Nothing" Then
        Load customerForm
        customerForm.Show
        Unload customerForm
        Doc.Fields.Update
        a$ = Doc.CustomDocumentProperties.Item("InvoiceNumber")
        a$ = customerForm.pathBox.Value + "\" + a$
        Doc.SaveAs (a$)
    End If
End Sub

我还在这里发布了完整的.dotm(Excel 2013)和.dot(以前的excel)以及一些示例数据(.xls):

Dropbox/Public/Invoice 2015-16.dotm

Dropbox/Public/Invoice 2015-16.dot

Dropbox/Public/data.xls

更新 我在这个问题上没有太多运气。任何人都可以建议一种方法来调查这个吗?或者我如何改进有关问题的信息?

1 个答案:

答案 0 :(得分:0)

我终于设法解决了这个问题,并且我有一些知识。

首先,调试器将错误显示在Load customerForm行上,但事实并非如此。

customerForm有一个_Initialize函数,可以在显示之前将数据加载到其中。此函数失败但调试器停在错误的位置。

我能够通过在_Initialize子的开头放置断点然后逐步执行代码来更有效地调试它。

一旦我发现这个,我意识到由于路径错误导致代码无法找到XLSX文件,从而导致运行时错误。

一旦我修好了所有路径,我就会遇到第二个错误:运行时错误&#39; 9&#39;这是一个下标问题。这也报告了Load customerForm行,也是由于_Initialize函数的问题。

这是问题的真正根源,并展示了Office 2013与早期版本的Office之间的功能变化。

我的代码正在打开XLSX文件并尝试从中读取数据:

Dim myXL As Object
Dim myWS As Object
Set myXL = GetObject("C:\Test\data.xlsx")

myXL.Application.Visible = True
myXL.Parent.Windows(1).Visible = True
Set myWS = myXL.Application.Worksheets("Customers")

运行时错误9是由Windows属性的索引引起的,因为它们没有窗口。在早期版本的Office中,只有一个窗口,2013年该数组为空。

经过多次搞砸后我尝试添加这一行:

myXL.Activate

访问Windows()数组之前。执行完成后,Windows(1)就存在了,代码就像以前一样工作。

希望这可以帮助其他人解决类似的问题。