Excel VBA运行时错误'32809' - 试图理解它

时间:2013-11-08 14:22:53

标签: excel-vba excel-2010 vba excel

一位正在工作的同事对我们的一个宏工作簿进行了一些更改,现在在我的PC上,只有当我尝试运行它时,我才收到可怕的运行时错误'32809'。这个最新版本在他的PC和我们测试它的另一个同事的PC上运行良好。以前的版本在我们所有的PC上运行良好,所有这些都运行Excel 2010。

当宏尝试选择名为“Info”的工作表索引1时,将引发错误。我知道选择/激活不是必需的,但我现在正在使用此工作簿,并且我正试图解决为什么我一个人会收到此错误。

我试过了:

  1. 重启/重启
  2. 保存工作簿的副本
  3. 使用CCleaner清除临时文件
  4. 在线研究
  5. 检查ActiveX控件(使用表单控件)
  6. 一切都没有成功。然后我在即时窗口看到了一些混乱,发现即使是简单的:

    Debug.Print ThisWorkbook.Worksheets(1).Name
    

    会抛出运行时错误,这会让我相信Workheet已经破坏了。我在工作表中添加了几个事件,包括_Activate和_Change,但是在确认之后都没有发生:

    Application.EnableEvents = True
    

    我添加了一个简单的Test Sub,如下所示:

    Public Sub Test()
    
        Dim ws As Worksheet
        Dim sheetNum As Integer
    
        For Each ws In ThisWorkbook.Worksheets
            ws.Select           ' Selects all Sheets Without Error
            Debug.Print ws.Name ' Prints All Worksheet Names Fine
        Next ws
    
        Set ws = ThisWorkbook.Worksheets(1)
        ws.Select               ' Selects Sheet 1 Without Error
    
        ' Prints all but sheetNum = 1, Run-time Error 32809
        For sheetNum = 7 To 1 Step -1
            Debug.Print ThisWorkbook.Worksheets(sheetNum).Name
        Next sheetNum
    
        ' Run-time Error 32809
        ThisWorkbook.Worksheets(1).Select
    
    End Sub
    

    有没有人碰到类似的东西,或者知道是什么原因导致这个错误只发生在某些PC上?

17 个答案:

答案 0 :(得分:6)

在我的案例中,帮助:

  1. 将文件另存为.xlsx(无宏) - 保存时将删除所有宏;
  2. 使用宏打开源文件并将模块复制到.xlsx文件;
  3. 将文件另存为.xlsm - 执行完全重新编译。
  4. 之后一切都开始正常工作了。我有200多页和50多个宏的文件,并且在每个模块中发表评论都没有帮助,但这个解决方案有效。

答案 1 :(得分:5)

我也一直在努力解决这个问题。它实际上是由于12月开始通过Windows Update进行的一些Microsoft Office更新而发生的。它引起了相当多的麻烦,更不用说由于这个问题而导致生产力下降的时间。

其中一个更新会破坏表单,您需要按照UHsoccer的说明清除Office缓存

此外,另一个答案线程在这里: Suddenly several VBA macro errors, mostly 32809 有一个链接到MS博客的详细信息。

另一个更新导致另一个错误,如果您创建或修改其中一个表单(即使像保存表单数据一样简单),它将更新电子表格的内部,当给予没有更新的其他人时,将导致上述错误。

解决方案(如果您在同一电子表格中与其他人合作)?遗憾的是,要么让您处理的每个人都使用办公室更新,然后让他们清除办公室缓存,或者通过系统还原(或通过手动删除它们)恢复到2014年12月之前的更新。

我知道,解决方案不多,对吧?我也不高兴。

就像一个背景故事,我更新了我的机器,跟上更新,我处理的其中一家公司没有。我正在圣诞节前把头发拉出来试图找出问题,没有任何恢复点,我终于心软了,重新格式化了。

现在,一个月后,该公司的IT部门更新了他们的工作站。而且,毫不奇怪,他们也开始遇到类似的问题(更不用说当我收到他们的电子表格时,我遇到了同样的问题)。

现在,我们都在进行相同的更新,一切都很顺利。

答案 2 :(得分:1)

我在为客户开发应用程序时遇到了这个问题。在我的机器上工作代码/表单等工作得很好但是当加载到客户端的系统时,这个错误发生在我的应用程序中的某个时刻。

我对此错误的解决方法是通过删除VBA模块和表单来拆除工作簿与表单和代码。完成此操作后,我的客户端复制了“裸”工作簿以及模块和表单。将表单和代码导入启用宏的工作簿使应用程序能够再次工作。

答案 3 :(得分:1)

就我而言,在以下情况下执行宏时发生错误: 表格(“自己的第一张”)。选择

将表格复制到另一个名称,即。 “oso”,然后删除原始工作表并将新工作表重命名为“自己的工作表”

Excel 2013

答案 4 :(得分:1)

似乎32809是一般错误消息。经过一段时间的努力,我发现我没有点击工作簿功能区下方的“启用宏”安全按钮。一旦我这样做,一切正常。

答案 5 :(得分:1)

这对我使用excel 2010起作用,并在打开macro-enabled .xlsm文件时收到同样的错误。

- 在解除错误对话框后,执行" save as"制表符分隔的.txt文件。点击OK获取

  

...只有活动表。

     

...功能未保存。

-then" save as"再次,但这次选择macro-enabled .xlsm格式。 (到另一个文件或覆盖原始文件并不重要,但保存为另一个感觉更安全。)

- 关闭excel。

- 打开新保存的.xlsm文件。在我的情况下,错误消息消失了,宏正在工作。

答案 6 :(得分:0)

错误32,809:将损坏的工作表复制到新工作表并更改名称或删除损坏的工作表对我来说很有效。此外,我转到了损坏工作表的SHEET模块,并从与损坏工作表相关的工作表模块中删除了代码。那也为我解决了这个问题。 [工作表模块可以具有由特定于该工作表的事件触发的例程。]因此,就我而言,我认为这是一个损坏的工作表模块,而不是工作表本身上的数据。

答案 7 :(得分:0)

我遇到了类似的(几乎无法解释的)行为

在C:\ Users \ username \ AppData \ Local \ Temp目录下找到删除.exd文件的引用 在Excel8.0和VBE的每个目录中都有一个。典型名称是MSForms.exd

谷歌“Excel exd”或“KB 2553154”从我的角度来看,这是一个完全不可接受的情况,至少已经存在了一个月。

答案 8 :(得分:0)

我有类似的问题。 VBA(ActiveX)代码在20台以上的计算机上运行良好已经有几年了,当一位新同事加入时,问题突然浮出水面,尽管Excel版本相同,但该代码在他的新笔记本电脑上却无法正常工作,它显示了Run错误'32809'。 我已经检查了ActiveX和Macro的所有安全设置,都正确。 我做了一些实验。我发现在计算机上创建的代码无法在同事的新笔记本电脑上使用。 但是,如果我在同事的新笔记本电脑中创建代码,则该代码可以在我的计算机中使用。一旦将此代码保存在计算机中,它将无法再在同事的笔记本电脑中使用。

通过详细检查错误,问题在于计算机上编写的所有代码,我的同事的Excel都无法识别它们。 Debug >> Compile将显示编译错误,甚至无法识别“ DIM ...”。所有ActiveX控件,组合框,按钮...属性名称均被随机分配一个新名称。例如,我有一个名为[AddNew]的按钮,一旦在同事的新笔记本电脑中打开,它将重新分配为[commandbutton54]。它甚至无法识别现有的工作表名称。

研究了所有解决方案后,我发现删除“ * .exd”文件不起作用(即使清空回收站也是如此。)'添加注释'不起作用...

最后的解决方法是:

第1步:用代码复制工作表的副本(不需要带代码的工作表)

第2步:删除原始工作表

第3步:将复制的工作表重命名为其原始名称

它开始工作。我发现所有ActiveX控件在其属性中都恢复了其原始名称。只花了一分钟。希望它能帮助面临同样问题的人们。 注意: 无需将文件保存到* .txt或重命名为xlsx ...

答案 9 :(得分:0)

在特定工作表中添加带有VBA代码的组合框后,我遇到了这个问题。 测试代码等完全没问题,直到我再次打开工作表。 Stackoverflow和微软有许多解决方案,但没有真正的解决方案。 我使用excel 2010(荷兰版)和W10(从W7升级)。我认为问题出在Excel 2010中。 在我的情况下,我在线上发生了一个错误,在一个长时间没有改变的模块中,通过VBA取消保护。

好的,我认为这是这样的: FM20.DLL存在安全问题,因为MS在2015年第一季度有更新。此更新安装了新的FM20.DLL,但语言包(FM20NLD.DLL和FM20ENU.DLL)未更新。可能,如果您不使用语言包,则不会出现此错误。在我看来,语言部分也应该已经更新(但没有可用的更新)

好的,删除.exd文件的工作片刻。这是一个临时工作。 MS没有真正的解决方案,但重新编译代码“解决”了问题。

这就是为什么有些人说:'添加评论,问题就解决了'。是的,添加注释会强制重新编译。

我同意,这仍然是一种解决方法,但不是临时工作。 所以: 1.检查错误存在的VBA代码的哪一部分 2.添加强制重新编译的注释。 3.再次保存项目

这就是全部

答案 10 :(得分:0)

我找到了解决方案。 只需下载以下Office更新: https://support.microsoft.com/en-us/kb/2920754

在32位或64位之间选择并安装。

为我工作,希望它适合你。

此致

答案 11 :(得分:0)

我导出了VBA模块 - 重新保存了文件,然后再次导入模块,一切都很好

答案 12 :(得分:0)

我做了以下工作并且像魅力一样工作:

  1. 安装Office 2013(我没有尝试使用2010,但我认为它也可以使用)。
  2. 安装Office 2013 SP1。
  3. 运行Windows更新并安装所有Office和Windows更新。
  4. 重新启动计算机。
  5. 完成。
  6. 这适用于两台不同的电脑。我希望这也会对你有用!

答案 13 :(得分:0)

我已经从工作表中删除了所有ActiveX控件,现在它可以顺利运行,没有任何错误消息。这是我的解决方案。

答案 14 :(得分:0)

好的,这可能很奇怪。无论如何我的一个同事有这个错误,我们尝试编辑VBA编译什么。但问题是,只需将excel文件复制到桌面即可。它奏效了。 Excel文件最初位于网络驱动器中。这很有效,这是我对这个问题的回答。

答案 15 :(得分:0)

我的解决方案(可能不适合你)

在标记错误的计算机上打开该应用程序。以某种方式更改VB代码。 (我在其中一个宏中添加了一条无意义的代码注释行)

表格(sheetName)。选择“没有后果的评论”

并保存。这会导致重新编译。关闭并重新打开 - 全部修复。

希望这有意义并且有所帮助

捐赠

答案 16 :(得分:-1)

删除-(RACSignal *) observeSelectedLanguage { @weakify(self); return [RACObserve(self, selectedLanguage) filter:^BOOL(NSString *value){ @strongify(self); if (value == LocalizedString(myValueString(English))) { self.selectedLanguageAbbreviation = @"en"; return self.selectedLanguageAbbreviation; } else if (value == LocalizedString(myValueString(German))) { self.selectedLanguageAbbreviation = @"ge"; return self.selectedLanguageAbbreviation; } else if (value == LocalizedString(myValueString(French))) { self.selectedLanguageAbbreviation = @"fr"; return self.selectedLanguageAbbreviation; } else if (value == LocalizedString(myValueString(Spanish))) { self.selectedLanguageAbbreviation = @"sp"; return self.selectedLanguageAbbreviation; } else { self.selectedLanguageAbbreviation = @"en"; return self.selectedLanguageAbbreviation; } }]; } 的所有实例为我解决了这个问题。