【发布时间】:2020-02-29 05:42:21
【问题描述】:
我有一条丝带,名为Ribbon 1
我希望我的功能区仅在工作簿打开时显示。如果只有 excel 应用程序正在运行并且没有打开工作簿,那么我想隐藏我的功能区选项卡。我该怎么做?
这是我尝试过的,但它没有隐藏功能区
Public Class ThisAddIn
Private Sub Application_WorkbookOpen(ByVal doc As Excel.Workbook) Handles Application.WorkbookOpen
If Application.Workbooks.Count > 0 Then
If Globals.Ribbons.Ribbon1.Tab1.Visible = False Then Globals.Ribbons.Ribbon1.Tab1.Visible = True
End If
End Sub
Private Sub Application_WorkbookBeforeClose(ByVal doc As Excel.Workbook, ByRef Cancel As Boolean) Handles Application.WorkbookBeforeClose
If Application.Workbooks.Count = 1 Then
If Globals.Ribbons.Ribbon1.Tab1.Visible = True Then Globals.Ribbons.Ribbon1.Tab1.Visible = False
End If
End Sub
End Class
我没有收到任何错误。它根本没有隐藏它。我在If Globals.Ribbons.Ribbon1.Tab1.Visible = True Then Globals.Ribbons.Ribbon1.Tab1.Visible = False 上设置了一个断点。该行已执行,但选项卡没有隐藏。我的大脑冻结了!这是做我想做的事情的正确方法吗?
【问题讨论】:
-
你可以试试:
Globals.Ribbons.Ribbon.Ribbon1.Visible = false吗? -
你的公平性测试应该是
==而不是= -
两者都不起作用。 'Ribbon' 不是 'ThisRibbonCollection' 的成员,而且 vb.net 中的
==也会出错。==是 C#。是的,我确实将这个问题标记为 C#,因为在 vb.net 和 c# 中尝试此问题的基本逻辑是相同的。 :) -
对不起,我不知道它在 vb.net 中有所不同。我在第一条评论中提出的代码适用于 C# VSTO。
-
@Malick,在 c# 中,
==用于比较,=用于分配。在 vb.net 中,=用于比较和赋值。编译器足够聪明,可以区分两者。但最终 c# 和 vb.net 都编译为相同的 MSIL。所以我很确定代码在 c# 中也不起作用。但是这个世界上总是有意想不到的事情发生,所以我会在 c# 中尝试一下,让你知道。
标签: c# excel vb.net vsto add-in