【问题标题】:run macro when open workbook打开工作簿时运行宏
【发布时间】:2018-11-30 03:10:28
【问题描述】:

我已经搜索过了。最相关的建议“workbook_open”的宏名称 但我仍然必须手动调用该模块。这是我编码的内容。 (欢迎提出任何其他建议,因为这是我 73 岁时的第一个 vba 脚本)

Sub Workbook_Open()  
  Dim lastRow As Long     'last row with data  
  Dim thisDate As Double  'start timestamp  
  thisDate = Now()  
  With Sheets("Pressure Log")  
    lastRow = .Range("B" & .Rows.Count).End(xlUp).Row 'populate next row with date/time  
    Range("B" & lastRow).Offset(1) = Format(thisDate, "dddd")  
    Range("B" & lastRow).Offset(1, 1) = Format(thisDate, "mm/dd/yyyy")  
    Range("B" & lastRow).Offset(1, 2) = Format(thisDate, "hh:mm AM/PM")  
    Range("B" & lastRow).Offset(1, 3).Select 'position for user data  
  End With  
End Sub  

【问题讨论】:

  • 你需要把这个放在Workbook的代码后面(ThisWorkbook是默认的)。
  • 嗨 gpNadpa,欢迎来到 Stack Overflow。你能澄清一下你看到了什么问题吗?文件打开时宏不执行吗?
  • 感谢您的及时反馈 -- Eliot K。是的,问题是当我打开工作簿时宏没有执行。共产国际:我不理解“代码背后”的含义。
  • 对不起。我应该在哪里寻找“ThisWorkbook”?我在开发人员选项卡中。到目前为止,我使用的两个选项是“Visual Basic”,它显示了上面的代码(作为“Module1”)和“Macros”,它列出了“Workbook_Open”并为我提供了运行、编辑等选项。人。

标签: excel vba


【解决方案1】:

在 Visual Basic 编辑器 (VBE) 中,调出 Project Explorer (Ctrl+R),然后双击 ThisWorkbook 模块(或右键单击它并选择“查看代码"):

这将调出ThisWorkbook 模块的代码隐藏ThisWorkbook 代表托管您的 VBA 项目的工作簿;它是一种特殊类型的模块,它继承了Excel.Workbook 类的所有成员,可以表示任何 Excel 工作簿。

在代码窗格的顶部,您会注意到两个下拉菜单:

从左侧下拉列表中选择Workbook; VBE 会自动为Open 事件生成一个事件处理程序 过程:

注意右侧的下拉列表现在显示Open - 如果您单击该下拉列表,您会发现它列出了Workbook 可以处理的每个事件;选择一个将自动生成具有正确签名/原型的方法。

现在把你的代码放到那个事件处理程序过程中,保存——你就设置好了!下次在启用宏的情况下打开该工作簿时,将调用该事件处理程序,并且您的宏将运行。

玩得开心!学习永远都不晚!

【讨论】:

  • 做到了。谢谢。这似乎是我应该具备的基本素养。您对“进一步阅读”有什么建议吗?
  • 嗯...你可以破坏一些东西,但你必须非常努力地工作才能让它被不可挽回地破坏。
  • code-behind 是借用另一种语言的术语吗?跨语言使用的松散术语?是更常见的术语代码窗格吗? +
【解决方案2】:

除了 Mathieu 的回答之外,还有另一种在打开工作簿时运行代码的方法:您可以在标准模块中创建 Auto_Open 过程。 警告!此功能可以在 Office 的下一版本中删除,但它仍然存在! ?

在标准模块中:

Sub Auto_Open()
    ' Your code
End Sub

同样,您可以使用Auto_Close 过程代替BeforeClose 事件处理程序。

【讨论】:

    最近更新 更多