Excel 我可以分解代码以执行.Find方法吗?
我想用更小的步骤分解这一行代码,使其更易于理解,但我遇到了一些问题,要么是编译错误,要么是运行时错误,要么就是错误的响应 作为VBA编码的初学者,也许有人会告诉我为什么不可能,或者如果可能的话,我的方法哪里出了问题 这段代码是下面的函数片段,但下面的函数不是Excel 我可以分解代码以执行.Find方法吗?,excel,vba,Excel,Vba,我想用更小的步骤分解这一行代码,使其更易于理解,但我遇到了一些问题,要么是编译错误,要么是运行时错误,要么就是错误的响应 作为VBA编码的初学者,也许有人会告诉我为什么不可能,或者如果可能的话,我的方法哪里出了问题 这段代码是下面的函数片段,但下面的函数不是 Dim WksN As String Dim res As Object ' Set res = Sheets("Sheet3").Cells(1, 1).EntireRow.Find(What:=name Set res = Sheets
Dim WksN As String
Dim res As Object
' Set res = Sheets("Sheet3").Cells(1, 1).EntireRow.Find(What:=name
Set res = Sheets(WksN).Cells(1, 1).EntireRow.Find(What:=name _
, LookIn:=xlValues _
, LookAt:=xlPart _
, SearchOrder:=xlByColumns _
, SearchDirection:=xlPrevious _
, MatchCase:=False)
Public Function GetColumnNumber(ByVal WksN As String, _
ByVal name As String) As Long
Dim wks As Worksheet
Dim rng As Range
Dim res As Object
Dim clmn As Object
' Set wks = ActiveWorkbook.Worksheets(CStr(WksN))
' Set wks = Sheets(CStr(WksN))
' Set wks = Sheets(CStr(WksN)).Activate
' Set wks = ActiveWorkbook.Worksheets(CStr(WksN)).Activate
Set wks = ActiveWorkbook.Worksheets(CStr(WksN)) '
' Set rng = wks.Cells(1, 1).EntireRow.Select ' Run time error
' Set rng = wks.Activate ' Not needed ??
' Set rng = wks.Rows(1).Select ' Compile error
Set rng = wks.Rows(1)
' With wks.Cells(1, 1).EntireRow ' Didn't work
With rng
Set clmn = .Find(What:=name, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
End With
If res Is Nothing Then
GetColumnNumber = 0
Else
GetColumnNumber = clmn.Column
End If
End Function
我想设置整个第一行的范围,然后
搜索并查找存储我的字符串的列
我不确定上面的陈述是否是原子的,不能被分解,
或者我如何不激活或选择“正确”范围,因为当第一个代码段的返回值为none零且正确时,此函数的返回值为零。
我的第二个问题是,当我使用.Rows(1)语句时,我似乎没有选择范围,这让我觉得我必须从根本上不理解这是如何工作的
Set rng = wks.Cells(1, 1).EntireRow.Select ' Run time error
Select
不返回值,因此如果您试图获取某个范围的引用,请不要使用该值
Set rng = wks.Cells(1, 1).EntireRow
这应该起作用:
Public Function GetColumnNumber(ByVal WksN As String, _
ByVal hdr As String) As Long
Dim f As Range
Set f = ActiveWorkbook.Worksheets(WksN).Rows(1).Find( _
what:=hdr, LookIn:=xlValues, lookat:=xlPart)
If f Is Nothing Then
GetColumnNumber = 0
Else
GetColumnNumber = f.Column
End If
End Function
您在函数外部设置了
res
,这样它就不会实例化该变量,并且在您检查时始终为空。您是否也不应该选中clm
,因为这是您在函数中执行搜索的地方?