使用表格(“”)。范围(“B:B”);搜索时可变范围

时间:2014-06-02 15:30:12

标签: excel vba variables excel-vba find

这就是事情,我有一个代码,它使用固定工作表中的固定范围来搜索值。我现在需要使工作表变量。到目前为止,我已经尝试了几件没有运气的事情。 我需要搜索的工作表的名称由另一个工作表中的单元格确定。用以下内容替换第3行:“With Sheets(”Sheets(“asd”)。range(“A1”)“)。范围(”B:B“)不起作用。

我的代码:

    FindString = W
    If Trim(FindString) <> "" Then
        With Sheets(**"CARS"**).Range("B:B")
                   Set Rng = Cells.Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
        If Not Rng Is Nothing Then
                Application.Goto Rng, True
            Else
                MsgBox "Nothing found"
            End If
        End With
    End If

如果需要更多信息,请与我们联系。 谢谢!

3 个答案:

答案 0 :(得分:1)

尝试省略一些双引号:使用表格(表格(“asd”)。范围(“A1”))。范围(“B:B”)

<强>解释

执行此操作时,您将收到编译错误:预期列表分隔符或)

With Sheets("Sheets("asd").range("A1")").Range("B:B")

这是因为双引号封装了一个字符串文字,因此在这种情况下,字符串文字为"Sheets(",这会在asd处引发错误(以及后续错误)。

解决方案是简单地引用Sheets("asd")对象,不需要在引号内限定该对象:)

注意 Brad会识别代码中的另一个潜在错误,请参阅下面的答案。

答案 1 :(得分:0)

看起来,当您键入With时,实际上并没有使用它。

With Sheets("CARS").Range("B:B")
           Set Rng = Cells.Find(What:=FindString, _  <~~ Cells references the active sheet
                    After:=.Cells(.Cells.Count), _
                    LookIn:=xlValues, _
                    LookAt:=xlWhole, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=False)
If Not Rng Is Nothing Then
        Application.Goto Rng, True
    Else
        MsgBox "Nothing found"
    End If
End With

你需要用一个圆点开始声明,表示你正在继续建立的参考资料With

With Sheets("CARS").Range("B:B")
           Set Rng = .Find(What:=FindString, _  <~~ .Cells
                    After:=.Cells(.Cells.Count), _
                    LookIn:=xlValues, _
                    LookAt:=xlWhole, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=False)
If Not Rng Is Nothing Then
        Application.Goto Rng, True
    Else
        MsgBox "Nothing found"
    End If
End With

我认为双*用于强调(Sheets(**"CARS"**) - &gt; Sheets("CARS")

答案 2 :(得分:0)

替换“With Sheets(”Sheets(“asd”)。range(“A1”)“)。范围(”B:B“)

由:

dim VAR_Sheet as string
Var_Sheet=Sheets("asd").range("A1").value
With Sheets(Var_Sheet).Range("B:B")
   ...code...
end with

也是这样的(同样的结果):

With Sheets(Sheets("asd").range("A1").value).Range("B:B")   'removed quotes that made error