Note: The other languages of the website are Google-translated. Back to English

如何通过单击Excel中的特定单元格来触发或运行宏?

在使用Microsoft Excel时,您可能知道如何使用命令按钮运行特定的宏。 但是您知道如何通过单击工作表中的特定单元格来运行宏吗? 本文将详细介绍单击特定单元格来触发宏的方法。

通过单击带有VBA代码的特定单元格来触发或运行宏


通过单击带有VBA代码的特定单元格来触发或运行宏

下面的VBA代码可以通过单击Excel中的特定单元格来帮助您运行宏。 请执行以下操作。

1.在带有单元格的工作表上,您需要单击以运行宏,右键单击工作表选项卡,然后单击 查看代码 从上下文菜单。

2。 在里面 Microsoft Visual Basic应用程序 窗口,将下面的VBA脚本复制并粘贴到“代码”窗口中。

VBA代码:通过单击特定的单元格来触发或运行宏

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 1 Then
        If Not Intersect(Target, Range("D4")) Is Nothing Then
            Call MyMacro
        End If
    End If
End Sub

说明:

1.在代码中,D4是您单击以运行Macro的单元格;

2.请替换代码名称 我的宏 使用宏,您将在工作表中运行。 看截图:

3。 按 其他 + Q 同时关闭按键 Microsoft Visual Basic应用程序 窗口。

从现在开始,单击当前工作表中的单元格D4时,将立即触发您指定的宏。


相关文章:


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能. 支持 Office / Excel 2007-2021 和 365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能 30 天免费试用。 60 天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (37)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
通过单击具有 VBA 代码的特定单元格来触发或运行宏,无法使其正常工作。 我尝试了很多不同的方式,但它从未实现过承诺。
该评论由网站上的主持人最小化
此代码仅在您将其放在“ThisWorkbook”模块中时才有效。 它不适用于通用模块。
工作簿名称 > Microsft Excel 对象 > ThisWorkbook。
该评论由网站上的主持人最小化
此代码适用于工作表代码模块。 您需要右键单击工作表选项卡,然后单击“查看代码”。 这将仅打开该工作表的代码模块。 然后粘贴上面提到的代码。
该评论由网站上的主持人最小化
如果您想拥有多个宏,在同一页面上运行不同宏的单元格 - 这可能吗?
该评论由网站上的主持人最小化
亲爱的西蒙,
下面的 VBA 脚本可以帮助您通过单击同一页面上的单元格来运行不同的宏。

Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
如果 Target.Count = 1 那么
If Not Intersect(Target, Range("D4")) is nothing 然后调用 MyMacro1
If Not Intersect(Target, Range("D8")) is nothing 然后调用 MyMacro2
If Not Intersect(Target, Range("D10")) is nothing 然后调用 MyMacro3
结束如果
END SUB

请添加行“If Not Intersect(Target, Range("D10")) Is Nothing Then Call MyMacro”通过单击单元格运行更多宏。 并根据您的需要更改代码中的单元格和宏名称。
该评论由网站上的主持人最小化
它不适用于我的 Excel。 代码正确吗?
该评论由网站上的主持人最小化
嗨卡米拉,
带来不便敬请谅解。 试试下面的 VBA 代码。

Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
将 xRgArr 调暗为变体
将 xFunArr 调暗为变体
将 xFNum 调暗为整数
将 xStr 调暗为字符串
将 xRg 调暗为范围
xRgArr = Array("A1", "D1", "C1") '用于触发宏的单元格
xFunArr = Array("代号1", "代号2", "代号3") '对应代号
如果 Selection.Count = 1 那么
对于 xFNum = 0 到 UBound(xRgArr)
设置 xRg = ActiveSheet.Range(xRgArr(xFNum))
If Not Intersect(Target, xRg) 则什么都不是
xStr = xFunArr(xFNum)
应用程序.运行 xStr
结束如果
下一页
结束如果
END SUB
该评论由网站上的主持人最小化
这工作得很好,将为我节省大量时间 - 感谢您分享您的知识 - 非常感谢!
该评论由网站上的主持人最小化
我很高兴能帮上忙。
该评论由网站上的主持人最小化
伟大的。 它运作良好......谢谢......
该评论由网站上的主持人最小化
你好。

我有这个运行良好,但想添加一个条件来运行宏。 如果我单击的单元格旁边的单元格包含某个值,我只想运行宏。
例如,当我单击单元格 F6 时,如果单元格 E6 包含“x”,我希望宏运行,但如果单元格 E6 为空白,则宏不能运行。
希望这是有道理的。
谢谢

这是我没有条件的原始代码:


选项显式

Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
如果 Selection.Count = 1 那么
If Not Intersect(Target, Range("F6:F18")) 什么都没有
调用日期Pick
结束如果
结束如果
END SUB
该评论由网站上的主持人最小化
嗨,
以下 VBA 代码可以帮助您解决问题。 请试一试,感谢您的评论。

Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
将 xRg 调暗为范围
If Not Intersect(Target, Range("F6:F18")) 什么都没有
设置 xRg = ActiveSheet.Cells(Target.Row, Target.Column - 1)
If (xRg.Value = "") Or (xRg.Value <> "X") Then Exit Sub
调用 datepick
结束如果
END SUB
该评论由网站上的主持人最小化
谢谢,但是合并的单元格呢?
该评论由网站上的主持人最小化
嗨,阿尔伯,
该代码不适用于合并的单元格。
该评论由网站上的主持人最小化
我正在使用 OpenOffice 并右键单击工作表选项卡并选择了事件,然后从 MyMacros 中选择了这个宏。但是我在以下行出现错误:如果 Selection.Count = 1 然后 >>>“基本运行时错误,变量未定义...
该评论由网站上的主持人最小化
嗨詹姆斯,
该代码仅适用于 Microsoft Office Excel。 感谢您的评论。
该评论由网站上的主持人最小化
我在这个宏中的完整代码是:


Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)

将 val 作为字符串
REM val = Range("A2").Value

如果 Selection.Count = 1 那么
If Not Intersect(Target, Range("D24")) 什么都不是
REM 调用 MyMacro
val = Range("D24").Value
范围(“B27”).Value = val
结束如果
结束如果
END SUB
该评论由网站上的主持人最小化
这个话题很有趣,我很感兴趣但不知道在哪里可以找到,感谢您创建这个话题,希望大家能帮助我 http://run-3.online
该评论由网站上的主持人最小化
Excel 2002 (XP):如果通过选择“文件”并按“Shift”打开工作簿,则会禁用该工作表中的宏,问题是如果我选择“工具 > 宏 > 宏...”我可以运行宏无论如何,如何解决?
该评论由网站上的主持人最小化
嗨罗杰,
我们尚未在 Excel 2002(XP) 中测试代码。 为什么不使用较新版本的 Microsoft Office? 你的工作会更轻松。
该评论由网站上的主持人最小化
2010 年的结果相同。
该评论由网站上的主持人最小化
为什么不只是使用一些更新的版本会更容易
https://games.lol/racing/
该评论由网站上的主持人最小化
谢谢,但是点击几个单元格来运行几个宏怎么样。
该评论由网站上的主持人最小化
嗨,
试试下面的 VBA 代码。

Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
将 xRgArr 调暗为变体
将 xFunArr 调暗为变体
将 xFNum 调暗为整数
将 xStr 调暗为字符串
将 xRg 调暗为范围
xRgArr = Array("A1", "D1", "C1") '用于触发宏的单元格
xFunArr = Array("代号1", "代号2", "代号3") '对应代号
如果 Selection.Count = 1 那么
对于 xFNum = 0 到 UBound(xRgArr)
设置 xRg = ActiveSheet.Range(xRgArr(xFNum))
If Not Intersect(Target, xRg) 则什么都不是
xStr = xFunArr(xFNum)
应用程序.运行 xStr
结束如果
下一页
结束如果
END SUB
该评论由网站上的主持人最小化
感谢您提供此代码。 是否可以通过单击与其他单元格合并的单元格来使其工作?
该评论由网站上的主持人最小化
嗨,西蒙兹,
本文中的代码可以帮你一个忙: https://www.extendoffice.com/documents/excel/4354-excel-click-on-cell-to-run-macro.html
感谢您的评论。
该评论由网站上的主持人最小化
您好,我试图使用此代码运行粘贴宏,但似乎无法弄清楚如何正确粘贴宏。

这是我原来的马可

子粘贴()
'
' 粘贴宏
'

'
范围(“ B34”)。选择
ActiveSheet.PasteSpecial 格式:="HTML", Link:=False, DisplayAsIcon:= _
错误,NoHTMLFormatting:=True
END SUB


任何帮助表示赞赏
该评论由网站上的主持人最小化
您好,感谢您的有趣主题。 例如,如果我想单击 Sheet4 中的 D1 并查看 Sheet2 中的宏结果怎么办!F3。
该评论由网站上的主持人最小化
不工作了。
Worksheet_SelectionChange 默认不存在。 这意味着您不能使用它来触发宏。

您可以使用的唯一嵌入子在“工作簿”下拉列表中引用,所以...

您可以做的唯一最接近的事情是使用 Workbook_SheetBeforeDoubleClick。 但是会进入编辑模式(仍然没什么大不了的)。
该评论由网站上的主持人最小化
嗨 CodeKiller.Worksheet_SelectionChange 仅存在于工作表(代码)编辑器中。 右键单击工作表选项卡并单击查看代码以激活工作表(代码)编辑器。
该评论由网站上的主持人最小化
重要的是要强调宏只在工作表中运行。
我们这些使用常规 Visual Basic 编辑器的人通常最终将宏存储在当前工作表之外的其他位置。
在这种情况下,这些代码都不起作用。
我发现这段代码要简单得多,而且对我来说效果很好: 

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Intersect(Range("d1"), Target) 什么都不是,那么
呼叫 aa
结束如果
END SUB
Sub aa() ' 把你的代码放在这里
范围(“D1”)。选择
选择.复制
范围(“F1”)。选择
ActiveSheet.PasteEnd 子
约翰·威尔斯
jnw.wells@gmail.com
该评论由网站上的主持人最小化
嗨约翰威尔斯,谢谢你的分享。
该评论由网站上的主持人最小化
对于那些希望这适用于合并单元格的人,最快和最脏的方法是更新第 2 行,如下所示:
选项显式

Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
如果 Selection.Count > 0 那么
If Not Intersect(Target, Range("D4")) 什么都不是
调用 MyMacro
结束如果
结束如果
End SubSelection.Count 用于确定在执行剩余宏之前是否进行了选择。 如果您的选择由四个已合并的单元格组成,Selection.Count 将等于 4,其余代码将永远不会执行。您也可以将第 2 行更改为合并的单元格的确切数量,但如果您这样做会导致问题合并其他单元格。
该评论由网站上的主持人最小化
宏伟! Grazie, era una vita che sognavo di poterlo fare, se può essere utile a qualcuno avendo necessità di eseguire più codici su più celle per
aumentare il numero di opzioni basta aggiungere le nuove istruzionisempre sotto la stessa option explicit altrimente ci viene detto che il riferimento al
工作表非 è univoco。 Mi spiego meglio evidenceemente su come ho adattato il codice con il mio esempio;

选项显式
Private Sub Worksheet_SelectionChange(作为范围的ByVal目标)
如果 Selection.Count = 1 那么
If Not Intersect(Target, Range("Y64")) 什么都不是
范围(“Y65:Y78”)。选择
范围(“Y65”)。激活
选择.清除内容
范围(“Y65”)。选择
结束如果
If Not Intersect(Target, Range("A33")) 什么都不是
范围(“A33”)。选择
选择.复制
ActiveWindow.WindowState = xlMinimized
发送键“^v”
发送键“{BACKSPACE}”
结束如果
结束如果
END SUB

Grazie ancora è stata un'autentica meraviglia!

马西莫
该评论由网站上的主持人最小化
我对这个标题没有任何期望,但我越是惊讶。 作者做得很好。 我花了几分钟阅读和检查事实。 一切都非常清晰易懂。 我喜欢填补你知识空白的帖子。 这个就是这样的。
该评论由网站上的主持人最小化
你好,

No encuentro la manera de hacer lo que necesito。 Espero de veras que me podáis ayudar。
Necesito que se lance una MACRO al hacer clic en una celda, pero no sé en qué celda va a ser, no lo puedo comparar con (si se ha seleccionado la celda A3, por ejemplo, que se lance la acción) porque por funcionalidades del fichero, las celdas se van a mover de sitio (se han podido insertar, mas o menos filas encima)。 Necesitaría poder saber qué celda es la que se ha seleccionado。
干草alguna manera de poder hacer eso?
非常感谢你提前。
该评论由网站上的主持人最小化
嗨,你好,
单元格地址是不变的。 您只能移动单元格的值。
您在 VBA 代码中指定的单元格仍然是触发指定 VBA 代码的单元格。
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点

关注我们

版权所有 © 2009 - extendoffice.com。 | 版权所有。 供电 ExtendOffice。 | 网站地图
Microsoft和Office徽标是Microsoft Corporation在美国和/或其他国家的商标或注册商标。
受Sectigo SSL保护