VBA:使用图纸(“图纸名称”)设置范围对象。行(1)。查找

VBA:使用图纸(“图纸名称”)设置范围对象。行(1)。查找,vba,excel,Vba,Excel,我有一组类似这样的代码,其中我在第1行搜索特定单词,并希望返回找到该单词的列号: Dim MyRng As Range Dim MySht As Worksheet Set MySht = ThisWorkbook.Sheets("Numbers") Set MyRng = MySht.Rows(1).Find("Header 3" etc...) FindSeriesColumn = MyRng.Column 似乎合乎逻辑的是,我应该能够消除定义工作表对象的需要,并且应该能够执行以下操作:

我有一组类似这样的代码,其中我在第1行搜索特定单词,并希望返回找到该单词的列号:

Dim MyRng As Range
Dim MySht As Worksheet
Set MySht = ThisWorkbook.Sheets("Numbers")
Set MyRng = MySht.Rows(1).Find("Header 3" etc...)
FindSeriesColumn = MyRng.Column 
似乎合乎逻辑的是,我应该能够消除定义工作表对象的需要,并且应该能够执行以下操作:

Dim MyRng As Range  
Set MyRng = ThisWorkbook.Sheets("Numbers").Rows(1).Find("Header 3" etc...)
FindSeriesColumn = MyRng.Column
但是,
Set MyRng…
行会导致错误。使用
此工作簿.Sheets(“Sheet Name”).Rows(1).查找…

使用此表单有哪些不当之处:

Sub fhksadf()
  Dim MyRng As Range
  Set MyRng = ThisWorkbook.Sheets("Numbers").Rows(1).Find(what:="Header 3")
  FindSeriesColumn = MyRng.Column
  MsgBox FindSeriesColumn
End Sub

编辑#1:

更容易定义要检查的范围,并在该范围开始后启动Find()

Sub fhksadf()
  Dim MyRng As Range
  Dim temp As Range
  Set temp = ThisWorkbook.Sheets("Numbers").Rows(1).Cells
  Set MyRng = temp.Find(what:="Header 3", After:=temp(1))
  FindSeriesColumn = MyRng.Column
  MsgBox FindSeriesColumn
End Sub
使用此表格:

Sub fhksadf()
  Dim MyRng As Range
  Set MyRng = ThisWorkbook.Sheets("Numbers").Rows(1).Find(what:="Header 3")
  FindSeriesColumn = MyRng.Column
  MsgBox FindSeriesColumn
End Sub

编辑#1:

更容易定义要检查的范围,并在该范围开始后启动Find()

Sub fhksadf()
  Dim MyRng As Range
  Dim temp As Range
  Set temp = ThisWorkbook.Sheets("Numbers").Rows(1).Cells
  Set MyRng = temp.Find(what:="Header 3", After:=temp(1))
  FindSeriesColumn = MyRng.Column
  MsgBox FindSeriesColumn
End Sub

你可以。。。我经常这样做。除非我误解了这个问题。您确定问题不在于.rows(1)部分吗?例如,我刚刚在正在处理的项目的即时窗口中测试了以下行:?f_overview.cells.Find(“Projet C”)。Address,它正确地回答了$C$3。您遇到了什么错误?那总是有帮助的。我想你想要全方位的。。看这里。该代码(第二块)在我的机器上运行良好(Excel 2013)。您的
Dim
语句中定义的
FindSeriesColumn
是什么?还有,你在这句话中犯了什么错误?我相信问题可能出在你遗漏的部分;特别是
,在:=
参数之后。您应该能够删除该参数。您可以。。。我经常这样做。除非我误解了这个问题。您确定问题不在于.rows(1)部分吗?例如,我刚刚在正在处理的项目的即时窗口中测试了以下行:?f_overview.cells.Find(“Projet C”)。Address,它正确地回答了$C$3。您遇到了什么错误?那总是有帮助的。我想你想要全方位的。。看这里。该代码(第二块)在我的机器上运行良好(Excel 2013)。您的
Dim
语句中定义的
FindSeriesColumn
是什么?还有,你在这句话中犯了什么错误?我相信问题可能出在你遗漏的部分;特别是
,在:=
参数之后。你应该可以删除那个参数。这个表单仍然给我带来一些麻烦。实际上,我是这样设置的,它也只有在我单独定义工作表对象时才起作用,但在一次完成所有工作时就不起作用了:
set SeriesRng=thishworkbook.Sheets(ShtName).Rows(seriestlerow).Find(what:=SeriesName,After:=Sht.Cells(seriestlerow,1),lookin:=xlValues,LookAt:=xlWhole,SearchOrder:=xlByColumns,SearchDirection:=xlNext,MatchCase:=True)
由于“after”语句,我现在在中看到了问题,所以问题解决了。对不起大家。这就引出了一个相关的问题:在这种情况下,搜索给定行的最快方式是什么?也就是说,我是否对“find”函数使用了太多不必要的约束?@teepee记住find()取决于find()以前的用法。总是在范围开始后开始。这种形式仍然给我带来一些麻烦。实际上,我是这样设置的,它也只有在我单独定义工作表对象时才起作用,但在一次完成所有工作时就不起作用了:
set SeriesRng=thishworkbook.Sheets(ShtName).Rows(seriestlerow).Find(what:=SeriesName,After:=Sht.Cells(seriestlerow,1),lookin:=xlValues,LookAt:=xlWhole,SearchOrder:=xlByColumns,SearchDirection:=xlNext,MatchCase:=True)
由于“after”语句,我现在在中看到了问题,所以问题解决了。对不起大家。这就引出了一个相关的问题:在这种情况下,搜索给定行的最快方式是什么?也就是说,我是否对“find”函数使用了太多不必要的约束?@teepee记住find()取决于find()以前的用法。始终在范围开始后开始。