Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
在Excel2003中基于单元格值运行不同的宏不起作用_Excel_Vba - Fatal编程技术网

在Excel2003中基于单元格值运行不同的宏不起作用

在Excel2003中基于单元格值运行不同的宏不起作用,excel,vba,Excel,Vba,我正在运行Excel2003,并试图根据当前工作表中的单元格值调用两个不同的宏。我的宏不工作,我很难理解原因-宏如下: Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C9")) Is Nothing Then Select Case Range("C9") Case "Select": HideST C

我正在运行Excel2003,并试图根据当前工作表中的单元格值调用两个不同的宏。我的宏不工作,我很难理解原因-宏如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C9")) Is Nothing Then
        Select Case Range("C9")
            Case "Select":  HideST
            Case "YES":     HideST
            Case "NO":      FindST
        End Select
     End If
 End Sub
我也试过:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sourceSheet As Worksheet
    Set sourceSheet = ActiveSheet
    If Not Intersect(Target, Range("C9")) Is Nothing Then
        Select Case ActiveSheet.Range("C9")
            Case "Select": HideST
            Case "YES":    HideST
            Case "NO":     FindST
        End Select
    End If
End Sub
但是,它也不起作用。。。 然后我尝试了完全不同的宏-结果相同:

Sub Worksheet_Change(ByVal Target As Range)
    Set Target = Range("C9")
    If Target.Value = "YES" Then
        Call HideST
    End If
    If Target.Value = "NO" Then
        Call FindST
    End If
End Sub
当我在C9上选择不同的值时,不会发生任何事情,因为宏未被触发。有人能帮忙吗

干杯 迈尔的

选项1就像保罗在评论中建议的那样

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C9")) Is Nothing Then
        Select Case Ucase(Range("C9").value2)
            Case "SELECT", "YES":  HideST
            Case "NO":             FindST
        End Select
     End If
 End Sub
选择2

有关选项比较,请参阅

确保将代码放在模块中,以获得单元格C9所在的正确表格


在VBA编辑器中,在子模块前面放置一个断点,并使用F8单步遍历每行代码,查看是否触发。然后仔细查看目标值。添加一块手表以查看其值。您很可能会看到VBA尝试比较yes=yes或yes=yes。这个问题可以这样解决:如果UCaseTarget.Value=YES,那么谢谢Paul,我按照你的建议做了-如果UCaseTarget.Value=YES,那么调用hides,它就不起作用了。。。我使用的是excel 2003,您是否能够单步执行代码?没有工作是不够具体的-到底是什么问题?宏只是没有被触发,什么都没有发生。。我确实注意到当我试图关闭工作表时,在它关闭之前,我得到了msge关于编译错误:检测到不明确的名称:工作表\u更改,这一行突出显示:子工作表\u更改Val目标为范围??这意味着您的VBA模块包含两个子模块,称为工作表\u更改请删除其中一个子模块,这些选项对我都不起作用:这可能是Excel 2003版本的问题吗?@Miles-不要关注Excel的版本,这些应该可以工作,但还有其他问题需要首先解决。让我们确保VBA按以下方式触发:expected@Miles:您必须将选项1或选项2的代码放入工作表模块。运行调试/编译。你有什么错误吗?嗨,斯托拉克斯,谢谢你的帮助,我真的很感激。。。我确实在辩论。。代码的一部分:Option Explicit位于宏代码中断的上方,位于上一个宏的End Sub下面。。。当我解包时,我得到了msge:只有注释可能出现在End Sub、End Function或End Property之后,我尝试在没有“Option Explicit”的情况下运行代码,但没有结果,因为宏未被触发…@Miles:Option语句必须位于模块的顶部,第一行。然后你应该把不同的潜艇放到模块里。是的!!!!那是关键!现在,当指定给正确的图纸时,它可以工作。从模块1开始,所有其他宏都可以正常工作,但是这个宏必须被分配到正确的工作表中——我注意到您已经正确地指定了一列和一个原始宏,并且在我的选择中使用了大写字母。非常感谢保罗和斯托拉克斯的大力帮助。好家伙!我很高兴这有帮助!
Option Explicit
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C9")) Is Nothing Then
        Select Case Range("C9").value2
        Case "Select", "YES" : HideST
        Case "NO":             FindST
        End Select
    End If
End Sub
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    With Target

        If .Column = 3 And .Row = 9 Then

            Select Case UCase(.Value2)

                Case "SELECT", "YES":   HideST
                Case "NO":              FindST

            End Select

        End If
    End With
 End Sub