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 for Applications 窗口,將下面的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 for Applications 窗口。

從現在開始,單擊當前工作表中的單元格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 腳本可以幫助您通過單擊同一頁面上的單元格來運行不同的宏。

私人子工作表_SelectionChange(ByVal Target As Range)
如果 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 代碼。

私人子工作表_SelectionChange(ByVal Target As Range)
將 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 為空白,則宏不能運行。
希望有道理。
謝謝

這是我沒有條件的原始代碼:


Option Explicit

私人子工作表_SelectionChange(ByVal Target As Range)
如果 Selection.Count = 1 那麼
If Not Intersect(Target, Range("F6:F18")) 什麼都沒有
調用日期Pick
如果結束
如果結束
END SUB
網站主持人對此評論進行了最小化
嗨,
以下 VBA 代碼可以幫助您解決問題。 請試一試,感謝您的評論。

私人子工作表_SelectionChange(ByVal Target As Range)
將 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。 感謝您的評論。
網站主持人對此評論進行了最小化
我在這個宏中的完整代碼是:


私人子工作表_SelectionChange(ByVal Target As Range)

將 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 代碼。

私人子工作表_SelectionChange(ByVal Target As Range)
將 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”)。選擇
Selection.Copy
範圍(“F1”)。選擇
ActiveSheet.PasteEnd 子
約翰威爾斯
jnw.wells@gmail.com
網站主持人對此評論進行了最小化
嗨約翰威爾斯,謝謝你的分享。
網站主持人對此評論進行了最小化
對於那些希望這適用於合併單元格的人,最快和最髒的方法是更新第 2 行,如下所示:
選項顯式

私人子工作表_SelectionChange(ByVal Target As Range)
如果 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;

Option Explicit
私人子工作表_SelectionChange(ByVal Target As Range)
如果 Selection.Count = 1 那麼
If Not Intersect(Target, Range("Y64")) 什麼都不是
範圍(“Y65:Y78”)。選擇
範圍(“Y65”)。激活
選擇.清除內容
範圍(“Y65”)。選擇
如果結束
If Not Intersect(Target, Range("A33")) 什麼都不是
範圍(“A33”)。選擇
Selection.Copy
ActiveWindow.WindowState = xlMinimized
發送鍵“^v”
發送鍵“{BACKSPACE}”
如果結束
如果結束
END SUB

Grazie ancora è stata un'autentica meraviglia!

馬西莫
網站主持人對此評論進行了最小化
我對這個稱號並沒有抱有任何期待,但越是驚訝。 作者做得很好。 我花了幾分鐘閱讀和檢查事實。 一切都非常清晰易懂。 我喜歡填補你知識空白的帖子。 這是一種。
網站主持人對此評論進行了最小化
HOLA,

沒有 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。
Hay alguna manera de poder hacer eso?
非常感謝你提前。
網站主持人對此評論進行了最小化
嗨,你好,
單元格地址是不變的。 您只能移動單元格的值。
您在 VBA 代碼中指定的單元格仍然是觸髮指定 VBA 代碼的單元格。
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護