【问题标题】:Code from XLSM doesn't work on other workbooks. How do I fix?来自 XLSM 的代码不适用于其他工作簿。我该如何解决?
【发布时间】:2021-07-11 10:56:26
【问题描述】:

我正在尝试通过带有宏按钮的 XLSM 文件设置多个文件的自动处理。这个宏按钮打开文件夹中的所有其他文件并处理它们。问题是当代码打开其他工作簿时,代码似乎停止在其他工作簿上工作。

即使在我尝试处理的工作簿上运行这个简单的代码也不起作用:

Sub LR_Test()
    Dim LR As Long
    LR = ActiveWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    Debug.Print LR
End Sub

这个错误出来,说“应用程序定义的或对象定义的错误”,在:

LR = ActiveWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

我进行了一些调试以确保我拥有正确的活动工作簿和工作表。代码打开和处理的工作簿是 xls 文件。他们中的大多数需要启用编辑,但这是通过以下方式完成的:

    If Not Application.ActiveProtectedViewWindow Is Nothing Then
        Application.ActiveProtectedViewWindow.Edit
    End If

我测试了活动工作簿,以确保在代码出错时启用编辑。

当我用我的 personal.xlsb 文件中的代码打开其他工作簿时,它可以计算 lastrows 并执行我编写的任何其他功能,但我需要其他用户能够使用我的代码。这就是为什么我试图让这段代码从 XLSM 文件中工作。

我们将不胜感激任何解决方案。

谢谢,

【问题讨论】:

  • "... 打开文件夹中的所有其他文件" - 如果您使用 Workbooks.Open,它会返回一个 Workbook 引用,您肯定应该将其分配给 Workbook变量,而不是针对ActiveWorkbook
  • 谢谢大本。自从我在这里发帖已经有一段时间了,但我记得过去从你那里得到了一些很好的答案。我使用的是工作簿变量,但在此处发布时简化了我的示例代码。原来我已经在工作表对象而不是模块中发布了我的代码。因此,当打开其他工作簿时,没有访问代码或其他东西。插入模块后代码全部工作。菜鸟错误!
  • @BigBen,关于代码逻辑/规则,我暗中相信你。这就是为什么自从我第一次听到你这么说以来,我一直在使用工作簿变量。但是,我想知道您是否介意解释为什么首选工作簿变量而不是 ActiveWorkbook,以及为什么首选工作表变量而不是 ActiveSheet。我一直在使用这些方法,但不明白为什么。
  • 您不能保证ActiveWorkbookActiveSheet 就是您的想法。此外,大多数情况下,您不需要激活工作簿或工作表即可执行您想做的事情。
  • 这是有道理的。再次感谢。先生,您是一位绅士和一位学者:)

标签: excel vba


【解决方案1】:

经过一番修改后,我意识到我已将代码放入 Microsoft Excel 对象之一(vba 编辑器中的工作表对象)而不是模块中。在 XLSM 文件中创建模块并将我的代码粘贴到模块中后,一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多