Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何通过第一次单击来运行宏,并通过第二次单击同一按钮来运行另一个宏?_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 如何通过第一次单击来运行宏,并通过第二次单击同一按钮来运行另一个宏?

Excel 如何通过第一次单击来运行宏,并通过第二次单击同一按钮来运行另一个宏?,excel,vba,excel-formula,Excel,Vba,Excel Formula,我有两个宏,一个用于显示图像,另一个用于隐藏或删除此图像。 我只需要在单击按钮时显示此图像,但在第二次单击时再次隐藏此图像。您可以使用相同的宏执行两个功能: Sub ShowAndHide() Dim s As Shape Set s = ActiveSheet.Shapes("Rectangle 1") s.Visible = Not s.Visible End Sub 如果宏运行且形状不可见,它将变为可见。下次运行宏时,它会将形状恢复为隐藏。重复单击将产生显示/隐藏

我有两个宏,一个用于显示图像,另一个用于隐藏或删除此图像。
我只需要在单击按钮时显示此图像,但在第二次单击时再次隐藏此图像。

您可以使用相同的宏执行两个功能:

Sub ShowAndHide()
    Dim s As Shape
    Set s = ActiveSheet.Shapes("Rectangle 1")
    s.Visible = Not s.Visible
End Sub

如果宏运行且
形状不可见,它将变为可见。下次运行宏时,它会将
形状
恢复为隐藏。重复单击将产生显示/隐藏/显示/隐藏/显示……。

您可以对两个功能使用相同的宏:

Sub ShowAndHide()
    Dim s As Shape
    Set s = ActiveSheet.Shapes("Rectangle 1")
    s.Visible = Not s.Visible
End Sub

如果宏运行且
形状不可见,它将变为可见。下次运行宏时,它会将
形状
恢复为隐藏。重复单击将产生显示/隐藏/显示/隐藏/显示……。

如果您想使用相同的命令按钮在两个宏之间切换,以下内容可作为参考

Dim btnRun As Shape 'Declaring the command button variable
Sub Initializevariables()
Set btnRun = Worksheets("Sheet1").Shapes("Button 1") 'Initiailizing the variable
End Sub
' Ensure that you have assigned Macro 1 to the command button
Sub Macro1()
Call Initializevariables
MsgBox "Macro 1 ran"
btnRun.OnAction = "Module1.Macro2"
End Sub

Sub Macro2()
Call Initializevariables
MsgBox "Macro 2 ran"
btnRun.OnAction = "Module1.Macro1"
End Sub

如果您想使用相同的命令按钮在两个宏之间切换,可以使用下面的命令按钮作为参考

Dim btnRun As Shape 'Declaring the command button variable
Sub Initializevariables()
Set btnRun = Worksheets("Sheet1").Shapes("Button 1") 'Initiailizing the variable
End Sub
' Ensure that you have assigned Macro 1 to the command button
Sub Macro1()
Call Initializevariables
MsgBox "Macro 1 ran"
btnRun.OnAction = "Module1.Macro2"
End Sub

Sub Macro2()
Call Initializevariables
MsgBox "Macro 2 ran"
btnRun.OnAction = "Module1.Macro1"
End Sub

它不会工作,因为我的宏比这复杂得多。我从URL获取照片的第一个宏应用了这个概念,这个概念在示例中被巧妙地执行,这取决于您,特别是您最初没有提供任何示例代码…@HusinAljawad我理解您的担忧。我的回答只是一个技术演示。您可以在宏中设置两个单独的路径,具体取决于输入时的可见性状态。是的,您可以使用if-else块代替声明,一个用于从url绑定图像,另一个用于隐藏图像。这将不起作用,因为我的宏比这更复杂。我从URL获取照片的第一个宏应用了这个概念,这个概念在示例中被巧妙地执行,这取决于您,特别是您最初没有提供任何示例代码…@HusinAljawad我理解您的担忧。我的回答只是一个技术演示。您可以在宏中设置两个单独的路径,具体取决于输入时的可见性状态。是的,您可以使用if-else块代替声明,一个用于从url绑定图像,另一个用于隐藏图像。