[英]How to turn on 'Snap To Grid' on Excel start up with an add-in
我认为您有两个问题:
问题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
如果不存在工作簿,则不会启用“对齐网格”控件(请通过关闭所有工作簿进行检查)。 在当前状态下,您的代码将在这种情况下尝试执行,即If Not cbc.Enabled Then cbc.Execute
因为我认为您正在尝试检查它是否“打开”,而不是是否启用。
因为Excel加载项将作为“隐藏”工作簿加载,所以我认为它不会启用“对齐网格”命令栏控件。 因此,在加载项的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
我还没有对它进行彻底的测试,因为不知道您是如何编写外接程序的。 然而,这是做这种东西非常(如果不是 ),标准模式。 参见MSDN和Chip Pearson文章,您将找出在Class
, Module
等中包含哪些代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.