Excel双击功能区按钮以启动宏

时间:2017-06-04 15:47:14

标签: excel vba excel-vba vsto

我在Excel 2013中有一个看似简单的问题,我无法找到答案。下面我描述了所有细节。非常感谢您的任何帮助。

围绕问题的情况:

  1. 我在Excel中创建了一个包含Macro1的“QuickMacro.xlsm”工作簿。
  2. 其次我添加了自定义功能区(通过excel工具,而不是VSTO),并在该功能区上添加了所说的宏。
  3. 现在,每当我打开一个excel工作簿时,我都会快速地在我的计算机上的所有工作簿中使用该宏(并且隐藏了所述宏的工作簿,所以我看不到它并且它不会干扰我的工作)
  4. 我的问题:我希望Macro1仅在双击功能区上的图标时启动。单击就不应该做任何事情。

    我对这个问题的研究:为了找到答案,我在VSTO上添加了许多msdn资料,并添加了ins和宏教程。前者的问题是我只是VSTO的初学者,后者我发现只有“Worksheet_BeforeDoubleClick”事件会影响单元格激活,而不是功能区按钮激活。

    问题:最后,我的问题是:怎么做?有没有办法只使用Excel或我是否需要开始学习高级VSTO?此外,我还要感谢有关从何处开始挖掘以解决此问题的任何一般提示(除了我已广泛分析的msdn网站)。也许还有书吗?

1 个答案:

答案 0 :(得分:1)

通过将其指定给工作表上的形状进行测试(因此您的Sub声明可能看起来不同)。

Sub MenuAction()

    Static t As Double

    '0.25 sec double-click interval
    If [NOW()] - t > (1 / 24 / 60 / 60 / 4) Then
        t = [NOW()]
        Exit Sub
    End If

    Debug.Print "double-click"
    'run your code here

End Sub

编辑:使用[NOW()]Now()的附注。我看到一篇帖子说这两个表达式的精度不同,[NOW()]更精确。

例如(还包括Time用于比较):

Sub Tester()     Dim i,x

For i = 1 To 10
    'make a delay...
    For x = 1 To 3000#
        DoEvents
    Next x
    Debug.Print Time * 1, Now() * 1, [NOW()] * 1
Next i

End Sub

输出:

 Time                        Now()                       [NOW()]
 0.494270833333333           42891.4942708333            42891.4942753472 
 0.494270833333333           42891.4942708333            42891.4942768519 
 0.494270833333333           42891.4942708333            42891.4942782407 
 0.494270833333333           42891.4942708333            42891.4942795139 
 0.494270833333333           42891.4942708333            42891.4942810185 
 0.494282407407407           42891.4942824074            42891.4942824074 
 0.494282407407407           42891.4942824074            42891.494283912 
 0.494282407407407           42891.4942824074            42891.4942851852 
 0.494282407407407           42891.4942824074            42891.4942865741 
 0.494282407407407           42891.4942824074            42891.4942880787 

有趣!