【问题标题】:Excel VBA: Error when running a downloaded workbook with automatic startupExcel VBA:使用自动启动运行下载的工作簿时出错
【发布时间】:2018-07-12 18:30:44
【问题描述】:

我的工作簿有问题,一旦打开工作簿就会运行一个子例程。仅当第一次下载并运行工作簿时才会出现此问题。我已经设法通过在 ThisWorkbook -> Workbook Open 中有一个包含以下代码的工作簿来简化问题:

Private Sub Workbook_Open()
Sheet3.Activate
End Sub

显示的错误是“对象'_worksheets'的方法'激活'失败”,在我的原始程序中(没有简化,也没有在这里写,因为它很广泛)错误是不同的。

如何重现错误:

上传工作簿 -> 下载工作簿 -> 运行工作簿 -> 询问时启用内容(宏) -> 工作簿打开并运行 sheet3.activate -> 我收到错误 -> 关闭工作簿 -> 打开工作簿(没有错误,表 3激活) -> 打开工作簿时永远不会出错 -> 上传工作簿 -> 下载并运行工作簿 -> ...再次出错

就好像子例程在第一次设置工作簿时中断了 Excel,因此没有设置为激活工作表。

我真的很想有一个带有启动宏(显示用户窗体、隐藏 Excel)的工作工作簿,我可以发送给其他人而不会遇到错误。

有没有办法解决这个问题?

编辑:程序中没有其他代码。只有我写的。

编辑2:这可能指向罪魁祸首:当我下载后第一次运行工作簿时,会弹出错误,当错误出现时,我可以在Windows任务栏上看到工作簿的两个实例,一个名称后带有 [Protected view] 的。就好像子例程在工作簿从保护状态变为正常之前运行(在单击启用内容之后......)。如果这有任何意义。

【问题讨论】:

  • 该行应该是 Sheets("Sheet3").Activate
  • @RicardoA 如果 OP 指的是CodeName,则不是
  • 我不确定,DoEvent 函数可能对你有用。 Sheet3.Activate 不是标准做法。你应该使用 ActiveWorkbook.Activate ActiveWorkbook.Sheets(3).Activate DoEvent
  • 如果我使用 ActiveWorkbook.Activate,我会收到以下错误:“运行时错误 '91':对象变量或未设置块变量”,调试器指向 ActiveWorkbook.Activate。同样,这只发生在我下载后第一次打开工作簿时。之后它工作得很好。在 OP 中写了一些可能有帮助的东西。
  • 我也有这个问题。如果文件在下载并允许编辑后打开,则在 Workbook_Open() 中的任何活动工作簿代码中都会出现错误,因为它认为工作簿未处于活动状态。只有在它发生错误时退出工作簿并重新启动它才能正常工作。任何想法

标签: vba excel


【解决方案1】:

我没有看到您的所有代码,尤其是您激活的工作表中的代码,但也许以下内容可能会有所帮助:

'*******************************************************************************************************************************
' To activate the active worksheet
' Bug in Excel: The Worksheet_Activate event does not fire for a sheet that is currently active or may generate errors
' The solution is to call it explicitely, but make sure that Worksheet_Activate() is declared as Public in the worksheet code
'*******************************************************************************************************************************
Public Sub activateActiveSheet()

On Error Resume Next
ThisWorkbook.ActiveSheet.Worksheet_Activate
Err.Clear: On Error GoTo 0

End Sub

【讨论】:

  • 1. Sheet 有一个 Activate 方法,而不是 Worksheet_Activate。 2. 但是你为什么要激活(已经激活的)工作表——即ActiveSheet
  • 要在工作表激活时运行特定代码,您需要在其中放置一个 Worksheet_Activate 子。当工作簿打开并在您希望触发 Worksheet_Activate 子的工作表上启动时,通常它不起作用。所以,这个特殊的 sub 将确保它被触发,但 Worksheet_Activate 需要在工作表内是 Public。
  • 我写的代码就是这样。任何其他工作表中都没有代码。我遇到此问题的程序中的代码还有更多,但我将其范围缩小到此示例。我也没有尝试激活已经激活的工作表。我遇到的问题是下载后程序的启动。只是激活工作表的过程导致了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多