Excel 我可以分解代码以执行.Find方法吗?

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

我想用更小的步骤分解这一行代码,使其更易于理解,但我遇到了一些问题,要么是编译错误,要么是运行时错误,要么就是错误的响应

作为VBA编码的初学者,也许有人会告诉我为什么不可能,或者如果可能的话,我的方法哪里出了问题

这段代码是下面的函数片段,但下面的函数不是

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
,因为这是您在函数中执行搜索的地方?