2017-03-20 7 views
0

Ich versuche, VBA zu schreiben, um ein Makro auszuführen, wenn ein Kriterium erfüllt ist. Das Problem ist, dass ich es bekommen kann, um das erste Makro auszuführen, aber dann endet es!Makro zum Ausführen von Makro

Jedes Makro ist abhängig von einem wahren/falschen Ergebnis in einer eigenen Zelle.

Bisher habe ich versucht, dies:

Sub RUN_ALL_SET_SHEETS() 


    If Range("C28").Value = False Then 
       MsgBox "No Team Members Selected?" 
       End 

    ElseIf Range("C28").Value = True Then 


    Dim Response As VbMsgBoxResult 
    Response = MsgBox("Are you sure you want to set the sheets for the Team Members selected?", vbQuestion + vbYesNo) 
    If Response = vbNo Then Exit Sub 

    Else 
    Return 
    End If 

    If Range("C10").Value = True Then 
     Call Set_Sheet_Daniel 
    End If 

    ElseIf Range("C12").Value = True Then 
     Call Set_Sheet_Gill 
    End If 

    ElseIf Range("C14").Value = True Then 
     Call Set_Sheet_Hollie 
    End If 

    ElseIf Range("C16").Value = True Then 
     Call Set_Sheet_Jo 


    ElseIf Range("C18").Value = True Then 
     Call Set_Sheet_Laura_H 

    ElseIf Range("C20").Value = True Then 
     Call Set_Sheet_Laura_K 

    ElseIf Range("C22").Value = True Then 
     Call Set_Sheet_Lucy 

    ElseIf Range("C24").Value = True Then 
     Call Set_Sheet_Mark 

    ElseIf Range("C26").Value = True Then 
     Call Set_Sheet_Richard 

    Else 

    End If 

    Sheets("Header").Select 

    MsgBox "Data Refreshed." 


End Sub 

Jede Hilfe sehr geschätzt.

+0

Wie starten Sie das Makro? es wird nicht jedes Mal magisch ausgeführt, wenn du einen Zellenwert änderst oder was willst du? – xander

+0

"Ich kann es bekommen, um das erste zu laufen, aber dann endet das Makro" ... das erste was? Zeit, 'If' Aussage, etc. Kannst du bitte etwas klarer sein? Auch das liegt außerhalb des Rahmens dieser Frage, aber zum Schluss: Wenn Sie sich das 'Set_Sheet_ [name]' Format ansehen, müssen Sie wahrscheinlich nicht mehr als 10 verschiedene Makros haben. Ich nehme an, Sie könnten stattdessen 'Set_Sheet (Daniel)' sagen, wobei 'Daniel' an das andere Makro übergeben wird. Auf diese Weise müssen Sie nicht eine Menge zusätzlicher Subs erstellen, wenn sich nur ein Name ändert. – BruceWayne

+0

Was Sie wollen, ist [hier] gefunden (https://support.microsoft.com/en-us/help/213612/how-to-run-a-macro-when-certain-cells-change-in-excel) – zipa

Antwort

0

sollte diese Arbeit:

Sub RUN_ALL_SET_SHEETS() 


If Range("C28").Value = False Then 
      MsgBox "No Team Members Selected?" 
      End 
ElseIf Range("C28").Value = True Then 
Dim Response As VbMsgBoxResult 
    Response = MsgBox("Are you sure you want to set the sheets for the Team Members selected?", vbQuestion + vbYesNo) 
    ' Changed single line if statement here. 
    ' Single line if statements wont go to an else. 
    If Response = vbNo Then 
     Exit Sub 
    Else 
     Return 
    End If 

    If Range("C10").Value = True Then 
     Call Set_Sheet_Daniel 
    ElseIf Range("C12").Value = True Then 
     Call Set_Sheet_Gill 
    ElseIf Range("C14").Value = True Then 
     Call Set_Sheet_Hollie 
    ElseIf Range("C16").Value = True Then 
     Call Set_Sheet_Jo 
    ElseIf Range("C18").Value = True Then 
     Call Set_Sheet_Laura_H 
    ElseIf Range("C20").Value = True Then 
     Call Set_Sheet_Laura_K 
    ElseIf Range("C22").Value = True Then 
     Call Set_Sheet_Lucy 
    ElseIf Range("C24").Value = True Then 
     Call Set_Sheet_Mark 
    ElseIf Range("C26").Value = True Then 
     Call Set_Sheet_Richard 
    Else 

    End If 

    Sheets("Header").Select 

    MsgBox "Data Refreshed." 
End Sub 

zu bauen off von BruceWaynes Kommentar, scheint dies etwas besser geeignet für ein Unterprogramm mit args. Das würde ungefähr so ​​aussehen:

Sub Sheet_By_Name(sName as String) 
    ' This is just a demonstration. You would have to put your code 
    ' in this block. This also assumes the same operation is needed 
    ' for each name. 

    ' Checks to ensure a sheet with the supplied name exists 
    If Not ThisWorkbook.Sheets(sName) is Nothing Then 
     ' Your code would replace this. It is best to avoid activate and 
     ' select as is. Again, just for demonstration. 
     ThisWorkbook.Sheets(sName).Activate 
    Else 
     msgbox "A sheet with the name " & sName & " doesn't exist!" 
     Exit Sub 
    End If 
End Sub 
Verwandte Themen