繁体   English   中英

如何在Excel中打开“ Snap To Grid”以加载项启动

[英]How to turn on 'Snap To Grid' on Excel start up with an add-in

我正在寻找一种在每次启动Excel时自动打开“ 对齐网格”的方法

我算出了这段代码,并将其放入了总是在Excel启动时加载的加载项(.xlam)中。

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

如果不存在工作簿,则不会启用“对齐网格”控件(请通过关闭所有工作簿进行检查)。 在当前状态下,您的代码将在这种情况下尝试执行,即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文章,您将找出在ClassModule等中包含哪些代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM