簡體   English   中英

如何使用VBA執行基於IF語句的宏?

[英]How to use VBA to execute a macro based on an IF statement?

我想運行一個Excel VBA代碼(它要做的就是刪除同一行中的特定單元格,並且我已經打開了相對引用,以便在有適當的“ X”的情況下可以將Excel VBA代碼應用於所有行)基於某個單元格中是否存在X。

到目前為止,這是我嘗試過的(Excel VBA代碼僅稱為“生物學”):

If Range("C22").Value = "X" Then
   Call macro_Biology
End If

我應該補充一點,我正在VBA部分“ GetATPLabel”下編寫此代碼。 就像我說的,完全是菜鳥,但我想我已經很親密,因此可以提供任何幫助。

聽起來生物學 (或macro_Biology )宏需要知道它應該在哪一行上工作似乎很重要。 您可以使用參數將此信息傳遞給它。 例:

Sub start_with_this()
    Dim rw As Long, lr As Long
    With ActiveSheet
        lr = .Cells(Rows.Count, "C").End(xlUp).Row
        For rw = 2 To lr
            If UCase(.Cells(rw, "C").Value) = "X" Then
                Call macro_Biology(rw)
            End If
        Next rw
    End With
End Sub

Sub macro_Biology(r As Long)
    ' r is the row that was passed in.
    ' do something with r
End Sub

最初啟動start_with_this宏后,它將遍歷C列中的每個單元,從第2行到最后一行,其中包含任何內容。 如果找到Xx (在比較之前通過將單元格值強制為大寫字母來除去區分大小寫),則它將調用第二個宏macro_Biology並告訴它要處理的行。

讓我們假設Biology()是標准模塊中的子類:

Sub Biology()
    MsgBox "study biology!"
End Sub

要根據需要調用此命令,請運行:

Sub TestIt()
    If Range("C22").Value = "X" Then
        Call Biology
    End If
End Sub

若要在用戶在單元格C22中鍵入X時自動調用Biology() ,請在工作表代碼區域中插入以下事件宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    Set intrs = Intersect(Target, Range("C22"))
    If Not intrs Is Nothing Then
        If intrs.Value = "X" Then
            Application.EnableEvents = False
                Call Biology
            Application.EnableEvents = True
        End If
    End If
End Sub

要在公式C22單元格中給出X時自動調用Biology() ,請在工作表代碼區域中插入以下事件宏:

Private Sub Worksheet_Calculate()
    If Range("C22").Value = "X" Then
            Application.EnableEvents = False
                Call Biology
            Application.EnableEvents = True
    End If
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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