【问题标题】:VBA Search Range for text then run macro文本的VBA搜索范围然后运行宏
【发布时间】:2018-05-04 11:46:21
【问题描述】:

我正在尝试编写一个 VBA 宏(我将附加到命令按钮),它搜索 K7 到 K13 以找到“Sheet1”、“Sheet2”、“Sheet3”或“Sheet4”只有一个答案是可能基于预先存在的 If/Then 语句。 当它找到“Sheet1”时,我希望它运行宏“GoToSheet1” 当它找到“Sheet2”时,我希望它运行宏“GoToSheet2” 当它找到“Sheet3”时,我希望它运行宏“GoToSheet3” 当它找到“Sheet4”时,我希望它运行宏“GoToSheet4”

基本上,根据某人如何回答两个是/否问题,我有四种可能的情况。这就是最初的 if/then 语句所涵盖的内容。但是,我无法让 VBA 宏在单元格范围 K7 到 K13 中搜索四个文本短语中的任何一个。

【问题讨论】:

  • 请分享您到目前为止所尝试的内容?
  • 试试If Not Range("K7:K13").Find("Sheet1") Is Nothing Then GoToSheet1
  • 我尝试了使用现有论坛示例的案例陈述,但不确定如何将搜索从单元格更改为范围。我也不确定如何获得多个结果(例如,如果它没有找到“Sheet1”,那么我希望它搜索“Sheet2”)。
  • Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$K$7" Then Select Case Target.Value Case "Sheet1" Call GoToSheet1 Case "Sheet2" Call GoToSheet2 Case "Sheet3" Call GoToSheet3 Case "Sheet4" Call GoToSheet4 End Select End If End Sub 这显然是错误的,因为它只搜索特定单元格“K7”而不是“K7”到“K13”范围

标签: vba excel


【解决方案1】:

您当然可以遍历K7:K13 范围来检查每个单元格的值。但是使用Range.Find 方法会是更好的方法。

Private Sub CommandButton1_Click()
    Dim lookingRange As Range
    Set lookingRange = Range("K7:K13")
    If Not lookingRange.Find(What:="Sheet1", LookIn:=xlValues) Is Nothing Then GoToSheet1: Exit Sub
    If Not lookingRange.Find(What:="Sheet2", LookIn:=xlValues) Is Nothing Then GoToSheet2: Exit Sub
    If Not lookingRange.Find(What:="Sheet3", LookIn:=xlValues) Is Nothing Then GoToSheet3: Exit Sub
    If Not lookingRange.Find(What:="Sheet4", LookIn:=xlValues) Is Nothing Then GoToSheet4: Exit Sub
    MsgBox "not found"
End Sub

【讨论】:

  • 感谢@newacc2240,我怎么能这样写才能搜索单元格值而不是其中的公式?
  • 已编辑。但是我的excel默认搜索单元格值,很奇怪。
  • 黄金!非常感谢!
猜你喜欢
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 2018-04-28
相关资源
最近更新 更多