在Excel2003中基于单元格值运行不同的宏不起作用
我正在运行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
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