Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用VBA和Excel将单元格制作成命令按钮_Excel_Vba_Button_Named Ranges - Fatal编程技术网

如何用VBA和Excel将单元格制作成命令按钮

如何用VBA和Excel将单元格制作成命令按钮,excel,vba,button,named-ranges,Excel,Vba,Button,Named Ranges,在不插入按钮、形状或其他active-X对象的情况下,如何将电子表格单元格转换为按钮并执行VBA代码?将按钮放入单元格的替代方法 选择要使用工作表事件执行代码的单元格:工作表\u选择更改 将代码放在特定工作表的模块中,而不是工作簿模块中。根据您的喜好为单元格添加颜色/边框/文字;任何计算机或屏幕上的单元格都是一个单元格。当用户单击一个简短的标签/描述时,我使用它来引用从帮助工作表的查找中加载到用户表单中的帮助。这在合并单元格上用作按钮。使用单元格/按钮可避免Active-X对象受到它的投诉 要考

在不插入按钮、形状或其他active-X对象的情况下,如何将电子表格单元格转换为按钮并执行VBA代码?

将按钮放入单元格的替代方法

选择要使用工作表事件执行代码的单元格:工作表\u选择更改

将代码放在特定工作表的模块中,而不是工作簿模块中。根据您的喜好为单元格添加颜色/边框/文字;任何计算机或屏幕上的单元格都是一个单元格。当用户单击一个简短的标签/描述时,我使用它来引用从帮助工作表的查找中加载到用户表单中的帮助。这在合并单元格上用作按钮。使用单元格/按钮可避免Active-X对象受到它的投诉

要考虑的事项,以及示例代码,如下所示:

Address使用$字符返回绝对地址 在代码中使用Select大小写,即使只有一个单元格/按钮。这简化了以后添加单元格/按钮的路径 考虑在电子表格上使用命名范围,并在代码中引用它们。这样,VBA就不会在意您是否移动单元格/按钮 如果已经合并了要为其创建命名区域的单元格,请记住,电子表格中的命名区域仅指向左上角的单元格 但是,合并区域的Target.Address返回完整范围,而不仅仅是一个单元格。如果选择的大小写引用目标左上角单元格的地址,则可以避免此问题。 使用Target.Cells1,1.Address 合并单元格的错误选择:不使用MergeArea。地址MergeArea对合并单元格无效[仅对单个单元格有效];它返回单元格所在的合并范围。 *示例代码*


根据@TimWilliams的建议和引用的URL,根据那里的阅读资料和其他资料,我展示了一些在Excel 2010中对我有用的演示代码:IfError在早期版本中可能不起作用,我想知道在以后的版本中它的行为是否有所不同

注意:这段代码不能像普通VBA那样调试。这是因为它作为用户定义的函数在电子表格端执行

将公式放在单元格中,A2:

=IFERRORHYPERLINKMyUDF、CellText、垃圾邮件 单元格文本将显示在单元格A2中。 这个指向UDF。与代码中的Set语句相结合,它强制执行单击,并且仅在单击时执行一次,而不是作为在单元格中悬停和移动时执行的可重复事件 =超链接。。。,。。。是名称或其他错误的解决方法。使用mere=HYPERLINK时可以看到。。。。。 将此代码放入模块a维度和自定义项中:

Dim j as integer

Function MyUDF() ' this is a user-defined-function
    'NOTE: can't be traced when executed, 
        'so this creates debugging issues
Set MyUDF = Selection
Range("a1") = j
j = j + 1
End Function
单击A2中的URL将增加A1中显示的值-每次单击一个增量

要观察悬停效果,请执行以下操作:

注释掉Set语句 删除UDF引用周围的引号和磅符号。单元格现在将显示asdf而不是Test。 滚动URL,单元格A1将随着移动/悬停而增加。 要使整个单元格执行UDF和递增值,请启用单元格的换行符


请注意,当您在单元格中移动时,代码是如何经常执行的。对我来说,如果我在单元格中停止移动,代码将不会执行。

Hyperlink@TimWilliams-有趣的想法!参考包括解决滚动等问题的答案,以及点击操作。使用滚动效果,正如最初在那里和其他地方提出的那样,将实用程序添加到形状的弹出窗口中,作为帮助/注释…和其他答案/问题,以发现如何在不再悬停在单元格上时关闭弹出窗口。我还注意到,现在作为UDF执行的vba/代码无法直接跟踪,因此这可能会给新手带来问题。您的链接中也建议了解决方法
Dim j as integer

Function MyUDF() ' this is a user-defined-function
    'NOTE: can't be traced when executed, 
        'so this creates debugging issues
Set MyUDF = Selection
Range("a1") = j
j = j + 1
End Function