Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 - Fatal编程技术网

Excel 如何通过单击带有公式的单元格来激活宏?

Excel 如何通过单击带有公式的单元格来激活宏?,excel,vba,Excel,Vba,我试图通过单击单元格来激活宏 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Selection.Count = 1 Then If Not Intersect(Target, Range("B37")) Is Nothing Then Worksheets("DaysEditor").Activate Sheets("DaysEditor"

我试图通过单击单元格来激活宏

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Selection.Count = 1 Then
    If Not Intersect(Target, Range("B37")) Is Nothing Then
        Worksheets("DaysEditor").Activate
        Sheets("DaysEditor").Columns("C:LY").Hidden = False
        Sheets("DaysEditor").Columns("C:EX").Hidden = True
        Sheets("DaysEditor").Range("A1").Select
    End If
End If
End Sub

此代码适用于没有公式的单元格,但不适用于包含公式的单元格。

多亏了@K.Davis,他帮助我找出了问题所在,我将此代码附加到的单元格是一个合并单元格,这就是问题所在。我将Selection.Count=1改为Selection.Count=2,代码运行得非常好

我将对您的代码进行一些小调整。首先,如果您要对一个工作表进行多次调用,我建议您要么为它创建一个变量,要么在
With
语句中使用它

工作表()
本质上是一个函数。每次使用它时,它都必须获得函数的“值”——因此不是最有效的方法

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "$B$37:$C$37" Then
        With Worksheets("DaysEditor")
            .Columns("C:LY").Hidden = False
            .Columns("C:EX").Hidden = True
            .Activate
            .Range("A1").Select
        End With
    End If

End Sub
一般来说,我建议不要使用
Activate
方法。但是,当代码运行时,您似乎真的希望在工作表上,所以这并不是什么大问题。请记住,
Activate
不是代码其余部分正常工作所必需的


最后一个调整是,在隐藏/取消隐藏列之后,我移动了
Activate
方法。可能也没什么大不了的,但没必要看屏幕不必要地重画

您是否正在单击
B37
?不确定为什么需要相交,因为目标范围使用单个单元格,但无论如何,请确保单击的单元格正确。单元格的内容对于您正在使用的内容毫无意义。@K.Davis我在stackoverflow上找到了此代码,并将其应用到我的工作表中。就像我说的,如果我把它放在一个我手动输入的单元格中,然后点击它,那么它就能完美地工作。但是如果我把它链接到一个带有公式的单元格(这也是一个合并的单元格),它将不起作用。“合并单元格”不止一个单元格,对吗?因此,您的代码绕过了If Selection.Count=1部分。再说一次,与手机内容无关。@K.Davis啊。好啊是的,我正在尝试连接的单元格实际上也是B35和B36合并到一个单元格中。所以,如果我更改选择。Count=2,它应该工作吗?或者我必须做些别的事情吗?注意:合并的单元格是一场噩梦。避开他们!=)如果target.address=“$B$37:$C$37”,则最好使用
,然后…
。但那只是我的想法。您可以将两条If语句都替换为该行。@K.Davis如果我使用该行,我是否会删除Selection.Count和If Not语句,只需要一个“如果Target.Address=我的手机,则。。。。我剩下的代码?我将要发布另一个我在这张纸上遇到的问题,关于如何链接单元格并有条件地格式化它们。谢谢你说的对。你会把两者都去掉。这将允许目标为1或2个单元格,如果需要,可以将地址条件放入select case语句中<代码>选择案例目标。地址:案例“$B$37:$C$37”。还要记住,
选择
实际上是你的
目标
,所以无论如何我不会使用选择。@K.Davis Awesome。我刚试过这个,效果很好。我将把它添加到我的代码中。(我在12个不同的点上运行相同的代码,因此在每个点上拿出2行代码将产生很大的差异。)谢谢。谢谢!这很好用。我真的想激活屏幕。发生了什么我让这个宏在日历中每个月运行一次,如果你点击这个月的名字,它会把你带到另一个工作表,它会隐藏这个月开始之前的所有列。我还在处理另一个问题,在同一张纸上有条件地格式化,如果你想更好地了解我在做什么,请附上照片。