vba 忽略我的 with 语句
vba ignore my with statement
我试图使用 with...end with 在 excel 中的 vba 中指定搜索范围。我在一个文件中试过,效果很好。然后我在另一个中尝试了它,with 语句被忽略了。以下是示例代码:
Sub feat_overlap_within_set()
Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Activate
With Range("A2:A542")
Cells.Find(what:="hut").Activate
End With
End Sub
非常简单,我在这个工作表中有 2 个包含单词 "hut" 的单元格,一个在 A 列中,另一个在 B 列中。我希望总能在 A 列中找到那个,但是相反,每当我 运行 这个时,它总是指向 B 列中的那个。它在使用相同版本的 excel (2016) 创建的另一个文件中工作得很好。
您没有使用 With
块中可用的 "shortcutting"。 With
块的设计主要是为了让您在任何地方键入以 .
开头的内容,它都会被视为 withObject.
.
Sub feat_overlap_within_set()
Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Activate
With Range("A2:A542")
.Cells.Find(what:="hut").Activate
End With
End Sub
添加前导 .
是关键。没有它,你只是指 Cells
,默认为 ActiveWorkbook.ActiveSheet.Cells
.
一个更好的方法,避免 sheet 的 Activate
,并将 Range.Cells.Find
更改为 Range.Find
,并检查是否匹配找到,将是:
Sub feat_overlap_within_set()
With Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Range("A2:A542")
Dim dest As Range
Set dest = .Find(what:="hut")
If dest Is Nothing Then
MsgBox "Not found"
Else
Application.GoTo dest
End If
End With
End Sub
我试图使用 with...end with 在 excel 中的 vba 中指定搜索范围。我在一个文件中试过,效果很好。然后我在另一个中尝试了它,with 语句被忽略了。以下是示例代码:
Sub feat_overlap_within_set()
Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Activate
With Range("A2:A542")
Cells.Find(what:="hut").Activate
End With
End Sub
非常简单,我在这个工作表中有 2 个包含单词 "hut" 的单元格,一个在 A 列中,另一个在 B 列中。我希望总能在 A 列中找到那个,但是相反,每当我 运行 这个时,它总是指向 B 列中的那个。它在使用相同版本的 excel (2016) 创建的另一个文件中工作得很好。
您没有使用 With
块中可用的 "shortcutting"。 With
块的设计主要是为了让您在任何地方键入以 .
开头的内容,它都会被视为 withObject.
.
Sub feat_overlap_within_set()
Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Activate
With Range("A2:A542")
.Cells.Find(what:="hut").Activate
End With
End Sub
添加前导 .
是关键。没有它,你只是指 Cells
,默认为 ActiveWorkbook.ActiveSheet.Cells
.
一个更好的方法,避免 sheet 的 Activate
,并将 Range.Cells.Find
更改为 Range.Find
,并检查是否匹配找到,将是:
Sub feat_overlap_within_set()
With Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Range("A2:A542")
Dim dest As Range
Set dest = .Find(what:="hut")
If dest Is Nothing Then
MsgBox "Not found"
Else
Application.GoTo dest
End If
End With
End Sub