【问题标题】:Form initialization from ribbon - defaulting to what should be the inactive workbook从功能区初始化表单 - 默认为非活动工作簿
【发布时间】:2015-07-12 13:41:12
【问题描述】:

我一直在用 Excel 构建我的第一个 VBA 数据库应用程序。我创建了我的表单 - “Frmweeklytimesheet”,它捕获一些输入数据并将该数据移动到同一工作簿中的表 2。

我希望能够打开此工作簿并从“功能区”初始化表单。所以我自定义了功能区并添加了一个按钮,该按钮链接到运行打开工作簿的宏 CallTimesheet - 这是此代码。

   Sub CallTimesheet()
Dim FilePath As String
Workbooks.Open "S:\Shanes Stuff\Excel Data Base Stuff\TestDataBase.xlsm"
'Frmweeklytimesheet.Show >> This was moved into the Microsoft Excel Objects folder ThisWorkBook to execute on Open
End Sub

此时我尝试打开表单,但它在此处不起作用,因此将该行注释掉以供参考。

因此,我将 form.Show 语句移动到 Microsoft Excel 对象文件夹下的以下代码 -

 Private Sub Workbook_Open()
Frmweeklytimesheet.Show
End Sub

所以这是我的问题 - 这在我没有打开的工作簿时有效,我可以单击/选择功能区中的按钮,它会按计划打开/运行。但是,如果打开了另一个工作簿(让我们称之为“wbk2”),它将正确打开工作簿“TestDataBase.xlsm”,但表单继续引用“wbk2”。

任何建议,我是新手,因此非常感谢任何帮助。

Tks S.

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    在每个工作簿中使用单独的 Workbook_Open,您应该能够通过引用调用 Workbook_Open 宏的工作簿来设置表单的所有者。

    Private Sub Workbook_Open()
        thisworkbook.Frmweeklytimesheet.Show
    End Sub
    

    【讨论】:

    • 我不想工作,我收到“找不到方法或数据成员”错误。
    • 在我看来,它在工作簿有时间加载之前打开了表单,因此它引用了当时唯一的活动电子表格。只是想我会尝试在表单代码的开头放置一个 sheet.activate 并查看它的作用......
    • 发现了我的问题 - 我将 Workbook_Open 宏放置在工作表中。我将它移到它自己独特的 VBA 项目中,现在它可以工作了。这是正确的标准吗?
    • 不,但它也不属于工作表代码页。它属于 ThisWorkbook 代码页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多