2014-01-09 115 views
1

例如,我希望能夠基於單元格的結果運行宏。基於單元格結果運行的VBA宏

如果A1是1111100然後運行X宏如果它的1000000然後運行這個宏等。我曾看過「案例選擇」,但在這件事上我缺乏知識使我可能不是我想要的東西。

任何想法? :/

謝謝你的進步。

JB

回答

1

你可以結合這兩種類型,是的,一個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 

注意,我還禁用/啓用事件,所以這是不是每一個單元格改爲

0

主要有兩種類型的Excel宏的

1-那些已寫入執行寫入執行計算操作,更改數據等

2和那些並將值返回給某些單元格 (用作未內置到Excel中的自定義公式)

第一種類型只能通過單擊窗體上的按鈕觸發以啓動執行,調用Ma在Excel中選擇交叉窗口並選擇要運行的宏的名稱

第二種類型可以在某個單元格的值發生變化時立即運行(該單元格必須是所述宏函數的輸入,計算並返回一個特定的輸出),因此返回的值將被存儲在另一個單元格中。

在第二種類型中,Excel將忽略任何試圖修改其他單元格內容的代碼,對工作表,工作簿或任何其他操作執行操作,該操作不限於包含自定義宏的公式的單元格。

如果您打算運行第一個類型的宏,並希望在特定值更改後立即執行該宏,那麼這是不可能的。

如果你想編寫第二種類型的宏,那麼這是可能的,但代碼將僅限於單個單元格。

+0

我不介意循環的宏,它的工作方式下來的單元格(從A1開始,工作到A100或Z1等)。我需要使用這兩種方法,但這可能使用不同的宏,但我希望它根據單元格內的數字來處理數字和操作列表。 – JamieB

0

時間觸發是將需要通過它們循環。

您可以將下面的「cas」subs替換爲您的VBA實現。

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」。

0

修正了它。

通過使用Intergers完成此操作,當我沒有其他數據單元用於停止宏,並且檢測到許多'1'代碼時,使用「For」命令根據需要複製數據。