【发布时间】: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。我一直在使用这些方法,但不明白为什么。 -
您不能保证
ActiveWorkbook和ActiveSheet就是您的想法。此外,大多数情况下,您不需要激活工作簿或工作表即可执行您想做的事情。 -
这是有道理的。再次感谢。先生,您是一位绅士和一位学者:)