如何用VBA和Excel将单元格制作成命令按钮
在不插入按钮、形状或其他active-X对象的情况下,如何将电子表格单元格转换为按钮并执行VBA代码?将按钮放入单元格的替代方法 选择要使用工作表事件执行代码的单元格:工作表\u选择更改 将代码放在特定工作表的模块中,而不是工作簿模块中。根据您的喜好为单元格添加颜色/边框/文字;任何计算机或屏幕上的单元格都是一个单元格。当用户单击一个简短的标签/描述时,我使用它来引用从帮助工作表的查找中加载到用户表单中的帮助。这在合并单元格上用作按钮。使用单元格/按钮可避免Active-X对象受到它的投诉 要考虑的事项,以及示例代码,如下所示: Address使用$字符返回绝对地址 在代码中使用Select大小写,即使只有一个单元格/按钮。这简化了以后添加单元格/按钮的路径 考虑在电子表格上使用命名范围,并在代码中引用它们。这样,VBA就不会在意您是否移动单元格/按钮 如果已经合并了要为其创建命名区域的单元格,请记住,电子表格中的命名区域仅指向左上角的单元格 但是,合并区域的Target.Address返回完整范围,而不仅仅是一个单元格。如果选择的大小写引用目标左上角单元格的地址,则可以避免此问题。 使用Target.Cells1,1.Address 合并单元格的错误选择:不使用MergeArea。地址MergeArea对合并单元格无效[仅对单个单元格有效];它返回单元格所在的合并范围。 *示例代码*如何用VBA和Excel将单元格制作成命令按钮,excel,vba,button,named-ranges,Excel,Vba,Button,Named Ranges,在不插入按钮、形状或其他active-X对象的情况下,如何将电子表格单元格转换为按钮并执行VBA代码?将按钮放入单元格的替代方法 选择要使用工作表事件执行代码的单元格:工作表\u选择更改 将代码放在特定工作表的模块中,而不是工作簿模块中。根据您的喜好为单元格添加颜色/边框/文字;任何计算机或屏幕上的单元格都是一个单元格。当用户单击一个简短的标签/描述时,我使用它来引用从帮助工作表的查找中加载到用户表单中的帮助。这在合并单元格上用作按钮。使用单元格/按钮可避免Active-X对象受到它的投诉 要考
根据@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