簡體   English   中英

根據單元的結果運行的VBA宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM