[英]VBA macro to run based on the outcome of a cell
例如,我希望能夠基於單元的結果運行宏。
如果A1是1111100,則運行X宏;如果其1000000,則運行此宏,等等。我看過“ Case Select”,但是我對這件事的缺乏了解使我覺得這不是我想要的。
有任何想法嗎? :/
在此先感謝您。
JB
您可以將兩種類型結合使用,是的, Case Select
是最容易閱讀和維護的。
以下示例代碼根據A1中的內容運行不同的例程:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A1"), Target) Is Nothing Then
Application.EnableEvents = False
Select Case Target.Value
Case "A"
FunctionWhenA
Case 1
ThasIsAnotherFunction
End Select
Application.EnableEvents = True
End If
End Sub
請注意,我也禁用/啟用事件,因此不會在每次更改單元格時觸發
Excel宏有兩種主要類型
1-為執行動作,更改數據等而編寫的代碼。
2-以及那些用於執行計算並將值返回到某些單元格的變量(用作自定義公式,這些公式未內置於excel中)
第一種類型只能通過單擊表單上的按鈕,在Excel中調用“宏”窗口並選擇要運行的宏的名稱來觸發以開始執行。
第二種類型可以在某個單元格的值發生更改時立即運行(該單元格必須是所述宏函數的輸入才能使用,計算並返回某個輸出),因此返回的值將存儲在另一個單元格上細胞。
在第二種類型中,Excel將忽略任何試圖修改其他單元格內容,對工作表,工作簿執行操作的代碼,或不限於包含自定義宏公式的單元格的任何其他操作。
如果您打算運行第一種類型的宏,並希望在某個值更改后立即執行它,那是不可能的。
如果要編寫第二種類型的宏,則可以這樣做,但是代碼將僅限於單個單元格。
是的,將需要遍歷它們。
在這種情況下,可以使用VBA的實現替換下面的“ cas”子項。
Function Strange(myVal)
Select Case myVal
Case 1
Cas1
Case 2
Cas2
Case 3
Cas3
End Select
End Function
Sub Cas1()
MsgBox ("hi")
End Sub
Sub Cas2()
MsgBox ("ha")
End Sub
Sub Cas3()
MsgBox ("ho")
End Sub
Sub LoopThem()
Do While ActiveCell.Value <> ""
Strange (ActiveCell.Value)
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
因此,具有值1,2,3的單元格A1至A3將連續彈出msgboxes“ hi”“ ha”“ ho”。
修復。
當我沒有其他要停止宏的數據的單元時,通過使用Intergers停止此操作,並在代碼中檢測到許多“ 1”,然后使用“ For”命令根據需要復制數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.