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

在Word VBA中加载表单时,如何修复错误432?,vba,ms-word,Vba,Ms Word,我有一个Word.dot文件,它在旧版本的Word中工作,但在Word 2013中运行时出现错误432 调试代码时,我有一行代码: Load customerForm VBA显示错误: 运行时错误“432”:在自动化操作期间找不到文件名或类名 项目“pennyscode”包括“Module1”,其中包含正在调试的函数、“ThisDocument”和一个名为“CustomPerform”的表单 我尝试过将名称更改为“pennyscode.CustomPerform”,但这没有任何区别 此代码是从

我有一个Word.dot文件,它在旧版本的Word中工作,但在Word 2013中运行时出现错误432

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

Load customerForm
VBA显示错误:

运行时错误“432”:在自动化操作期间找不到文件名或类名

项目“pennyscode”包括“Module1”,其中包含正在调试的函数、“ThisDocument”和一个名为“CustomPerform”的表单

我尝试过将名称更改为“pennyscode.CustomPerform”,但这没有任何区别

此代码是从从文档_New()调用的子函数调用的

更新

我可以在Load customerForm行上放置一个断点,并证明是该行导致了问题。如果此时我将鼠标悬停在VBA出现的“CustomPerform”一词上

customerForm = <Object variable or With block variable not set>
我还在这里发布了完整的.dotm(Excel 2013)和.dot(以前的Excel)以及一些示例数据(.xls):

更新
我在这个问题上没有太多进展。有人能提出一种调查方法吗?或者我如何改进关于这个问题的信息

我终于解决了这个问题,我学到了一些东西

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

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

我能够通过在_initializesub的开始处设置断点,然后单步执行代码来更有效地调试它

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

在修复了所有路径之后,我遇到了第二个错误:运行时错误“9”,这是一个下标问题。这也在Load CustomerPerform行中报告,也是由于_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属性的索引导致的,因为它们没有Windows。在早期版本的Office中,只有一个窗口,而2013年阵列为空

在经历了很多麻烦之后,我尝试添加这一行:

myXL.Activate
在访问Windows()数组之前。一旦执行,Windows(1)就存在了,代码也像以前一样工作


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

我终于解决了这个问题,我学到了一些东西

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

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

我能够通过在_initializesub的开始处设置断点,然后单步执行代码来更有效地调试它

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

在修复了所有路径之后,我遇到了第二个错误:运行时错误“9”,这是一个下标问题。这也在Load CustomerPerform行中报告,也是由于_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属性的索引导致的,因为它们没有Windows。在早期版本的Office中,只有一个窗口,而2013年阵列为空

在经历了很多麻烦之后,我尝试添加这一行:

myXL.Activate
在访问Windows()数组之前。一旦执行,Windows(1)就存在了,代码也像以前一样工作


希望这能帮助其他人解决类似问题。

您能发布customerForm中的所有代码吗?您真的需要在显示之前加载它吗?如果使用customerForm.Show会发生什么情况?这是否也会导致错误?或者在VBA编辑器中打开表单并按F5?还需要注意的是,如果表单调用的代码导致错误,调试可能会“跳回”Load语句,因此这可能不是导致初始错误的代码行。谢谢您的提问,我已对问题进行了编辑,以包含答案和完整代码的链接。您是否可以发布customerForm中的所有代码?在显示之前是否确实需要加载它?如果使用customerForm.Show,会发生什么情况?这是否也会导致错误?或者在VBA编辑器中打开表单并按F5?还需要注意的是,如果表单调用的代码导致错误,调试可能会“跳回”Load语句,因此这可能不是导致初始错误的代码行。感谢提问,我已编辑了问题,以包含答案和完整代码的链接