如何在单独的工作表中查找特定的单元格值?

时间:2015-11-17 19:18:29

标签: excel vba excel-vba

我有一段代码在当前工作表中搜索特定单元格值的范围,然后对该列执行操作。宏由同一页面上的表单控件按钮启动。我需要将表单控件按钮移动到另一个工作表,但我不知道如何将我的代码更改为仅在sheet1中搜索而不是在按钮所在的工作表中。

下面是我在使用同一工作表上的按钮作为数据时的代码。我只需要它来查看sheet1而不是当前工作表。

<?php

print str_repeat("a",24000000);

3 个答案:

答案 0 :(得分:5)

使用With ... End With statement设置范围/单元格父工作表。

with worksheets("Sheet1")   '<~~change to suit
    with .Range(.Range("A2:AX2").Find("BMA Authorization ID"), _
                .Range("A2:AX2").Find("BMA Authorization ID").End(xlDown))
        .value = .value  'same as .Copy .PasteSpecial xlPasteValues
    end with
end with

请注意,所有Range(...)现在都是.Range(...)。前缀期间(又名.句号)会生成所有范围&#39; parent在With .. End With中引用的工作表。

答案 1 :(得分:5)

正如findwindow所说;你需要对表格进行限定。 Normaly我会在评论中留下这个,但是这条线太长了,不能使用带有块。

Dim R1 As Range
Dim ws As Worksheet

Set ws = Sheets("Sheet1")'Change this name to the sheet desired.
'Use a with block.
'When using a with block .Range = ws.Range
With ws
    Set R1 = .Range(.Range("A2:AX2").Find("BMA Authorization ID"), .Range("A2:AX2").Find("BMA Authorization ID").End(xlDown))
    R1.Value = R1.Value
End With

答案 2 :(得分:1)

您可以使用Sheets(1).Range...Sheets("Sheet1").Range...

在这里查看有关在VBA中引用工作表的更多详细信息... Trying to reference another worksheet in active workbook

编辑:请不要将此作为反对其他答案的论据。它们是OP的优秀答案(为什么我等到一个被接受为止的部分原因)。我只是认为这值得一提。

我个人已经改编,开始欣赏,并会根据以下情绪推荐尽可能避免with陈述的惯例......

  

为什么C#没有VB.NET的'with'运算符?

     

许多人,包括C#语言设计师,都认为'with'经常损害可读性,而且更多的是诅咒而不是祝福。声明具有有意义名称的局部变量并使用该变量对单个对象执行多个操作比使用具有某种隐式上下文的块更清楚。

     

@Jon Skeet
  https://stackoverflow.com/a/4174826/3546415

使用变量声明看起来像这样......

Dim S1 As Worksheet
Set S1 = Sheets("Sheet1")
S1.Range... blah blah

当然,仍有一些情况下使用with仍然有意义。例如,当无法定义变量或设置大量属性时,但我同意,当您不必担心嵌套和检查with结构的顶部时,可读性通常会得到增强看看.Range实际上指的是什么。对于一个简单的程序来说,这不是一个问题,但值得记住的是更复杂的事情。