【问题标题】:Macro to run Macro运行宏的宏
【发布时间】:2017-03-21 01:52:51
【问题描述】:

如果满足条件,我正在尝试编写 VBA 来运行宏。问题是我可以让它运行第一个宏,然后它就结束了!

每个宏都依赖于各自单元格中的真/假结果。

到目前为止,我已经尝试过:

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

任何帮助表示赞赏。

【问题讨论】:

  • 如何运行宏?每次更改单元格值或您想要什么时,它都不会神奇地执行?
  • “我可以让它运行第一个但宏结束” ...第一个什么?时间,If 声明等。你能说清楚一点吗?此外,它超出了这个问题的范围,但仅供参考 - 查看您拥有的 Set_Sheet_[name] 格式,可能不需要 10 多个不同的宏。我假设您可以说,Set_Sheet (Daniel) 其中Daniel 被传递给另一个宏。这样一来,如果只是更改名称,您就不必创建大量额外的潜艇。
  • 你想要的都找到了here
  • If/ElseIf 是互斥的。
  • 宏是通过按钮手动运行来运行的。

标签: vba excel


【解决方案1】:

这应该可行:

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

以 BruceWaynes 注释为基础,这似乎更适合带有 args 的子例程。看起来像这样:

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

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2015-10-11
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多