【问题标题】:Open workbook with arguments打开带有参数的工作簿
【发布时间】:2017-08-07 17:39:34
【问题描述】:

问题:有没有办法打开工作簿并通过此操作传递参数/参数?

这个想法是区分用户直接打开工作簿 B(这将触发其 Auto_Open 代码)和工作簿 B 从另一个代码打开的情况工作簿.

【问题讨论】:

  • 怎么样:在打开 Excel 文件之前创建一个空文件(在同一目录中)。然后你告诉Workbook_Open 检查这个文件是否存在(甚至可能使用“文件中的密码”)。如果有这样的文件,那么除了删除该文件之外什么也不做。否则,执行正常的Workbook_Open 例程。
  • 是的,如果没有更简单的方法,这绝对是一个解决方案
  • 如果您在代码中打开工作簿,Auto_Open 将不会运行,除非您明确调用它。如果您的意思是Workbook_Open,请禁用事件。
  • 是的,我知道,但我希望它在两种情况下都能运行,但不同。

标签: vba excel


【解决方案1】:

我建议的两个选项,简而言之:

  1. 在您打开的工作簿中,将其添加到ThisWorkbook 模块:

Public OpenedInCode as Boolean

您的调用工作簿需要打开工作簿,然后使用类似

With Workbooks("workbook name.xlsm")
   .OpenedInCode = True
   .RunAutoMacros xlAutoOpen
End With

那么Auto_Open代码需要检查这个值。如果是False,是用户打开的;如果True,您的其他工作簿打开了它。

选项 2 只是使用来自 Auto_Open 的代码创建另一个例程,该例程采用可选的布尔参数。然后,您的 Auto_Open 代码只需调用此例程即可。您的呼叫工作簿将使用 Run

Dim wb as Workbook
Set wb = Workbooks.Open(path to file here)
Application.Run "'" & wb.Name & "'!routine_name", True

与选项 1 一样,被调用的例程只是检查参数是 True 还是 False 并做出相应的反应。

【讨论】:

  • 不幸的是,第一个选项对我不起作用。您是否尝试实施它?第二个选项确实有效!
  • 我之前用过第一个选项。我确实忘记提及变量必须进入已打开工作簿的 ThisWorkbook 模块 - 我将更新我的答案。
  • 再试一次,对我不起作用。无论我在源Workbook的With语句中设置为True还是false,变量的Msgbox都会返回False
  • 您是否在为 MsgBox 使用 Thisworkbook.openedincode?​​span>
  • 是的。 MsgBox ThisWorkbook.openedincodeMsgBox openedincode 返回 false 无论 openedincode 在调用工作簿中设置为什么
猜你喜欢
  • 1970-01-01
  • 2013-03-14
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
相关资源
最近更新 更多