如何打开Excel上的“alignment网格”,并启动加载项
我正在寻找一种方法来每次启动Excel时自动打开alignment网格 。
我制定了这个代码,并把它放在一个加载项(.xlam),我总是加载Excel启动。
Private Sub Workbook_Open() Dim cbc As CommandBarControl Set cbc = Application.CommandBars.FindControl(ID:=549) If Not cbc.Enabled Then cbc.Execute End Sub
但是当我启动Excel时,它会在cbc.Execute
引发此错误:
谁能告诉我什么是错的?
我认为你有两个问题:
问题1
我相信你正在尝试使用Enabled
属性是检查控件的切换状态。 相反,我想你想要的State
属性,而不是显示在intellisense)。 你的代码应该是这样的:
Public Sub ActivateSnapToGrid() Dim cbc As CommandBarControl Set cbc = Application.CommandBars.FindControl(ID:=549) If Not cbc Is Nothing Then If cbc.Enabled Then 'if snap to grid is off... If cbc.State = 0 Then cbc.Execute 'State should now = -1 End If End If End If End Sub
问题2
如果没有工作簿存在,则“alignment网格”控件未启用(请通过closures所有工作簿来检查这一点)。 在它的当前状态,你的代码试图执行在这种情况下,即If Not cbc.Enabled Then cbc.Execute
因为我认为你正在试图检查,如果它是“开”,而不是如果启用。
因为Excel加载项将作为“隐藏”工作簿加载,所以我不相信这会启用“alignment网格”命令栏控件。 因此,在加载项的Workbook_Open
事件中,控件将被禁用,这就是为什么你会得到错误。
您的加载项中需要一个应用程序级别的事件处理程序。 这是Excel加载项非常常见的。 在MSDN上看到这里的一些解释。 另外还看到Chip Pearson的这篇文章非常有用。 它将允许您为在加载项加载后生成的任何Workbook_Open
事件编写一个事件。
所以你最终会在你的加载项中使用这个代码(每个Chip Pearson)来调用上面提到的子代码(在问题1一节中):
Private WithEvents App As Application Private Sub Workbook_Open() Set App = Application End Sub Private Sub App_NewWorkbook(ByVal Wb As Workbook) Debug.Print "New Workbook: " & Wb.Name Call ActivateSnapToGrid End Sub
我没有彻底地testing过,因为无法知道你是如何写入你的加载项的。 然而,这是一个非常(如果不是)做这种东西的标准模式。 请参阅MSDN和Chip Pearson的文章,您将弄清楚哪些代码在Class
, Module
等中。