Vba 不同PC的不同结果:运行时错误91对象变量或未设置块

Vba 不同PC的不同结果:运行时错误91对象变量或未设置块,vba,excel,Vba,Excel,我在两台不同的PC上运行下面的代码,同时得到两个不同的结果:一个运行正常,另一个提醒“运行时错误91对象变量或未设置块”。有人能帮我吗 Function FindArchiveFile() As String FindArchiveFile = Application.Intersect(Worksheets("Filelist").UsedRange, _ Worksheets("Filelist").Range("B:B")).Find( _ CDate(Workshee

我在两台不同的PC上运行下面的代码,同时得到两个不同的结果:一个运行正常,另一个提醒“运行时错误91对象变量或未设置块”。有人能帮我吗

Function FindArchiveFile() As String 

FindArchiveFile = Application.Intersect(Worksheets("Filelist").UsedRange, _
    Worksheets("Filelist").Range("B:B")).Find( _
    CDate(WorksheetFunction.Large(Workshee‌​ts("Filelist").Range("B:B"), 2))).Offset(0, -1).Value 

Worksheets("Setting").Range("LastDate").Value = _
    Application.Intersect(Worksheets("Filelist").UsedRange,  _
    Worksheets("Filelist").Range("B:B")).Find( _
    CDate(WorksheetFunction.Large(Workshee‌ts("Filelist").Range("B:B"), 2))).Value 

End Function

我已经修改了你的函数,使它更易读。这应该有一些注意事项

如果从工作表调用此函数,它不太可能工作

  • 这是因为workhseet函数通常只能向调用单元格返回值。否则,它无法操作工作表对象。此函数试图在命名范围
    “LastDate”
    中设置一个值,这可能会失败。它可能会在这一行无声地失败,并且仍然会将值返回给调用单元
  • 从工作表调用此函数时,可能会引发循环引用错误
当从子例程调用时,该函数似乎可以工作,或者至少它不会为我返回错误

Sub Test()
'Use this to test the function
MsgBox FindArchiveFile
Worksheets("Setting").Range("LastDate").Value = FindArchiveFile
End Sub

Function FindArchiveFile() As String
    Dim ws As Worksheet
    Dim rngB As Range
    Dim rngInt As Range
    Dim foundVal As String

    Set ws = Worksheets("Filelist") 
    Set rngB = ws.Range("B:B")
    Set rngInt = Application.Intersect(ws.UsedRange, rngB)

    foundVal = rngInt.Find( _
        CDate(WorksheetFunction.Large(rngB, 2))).Offset(0, -1).Value

    '## I comment the next line out and put it in the calling subroutine, since
    '   the function returns a value, use the function properly.
    'Worksheets("Setting").Range("LastDate").Value = foundVal

    FindArchiveFile = IIf(foundVal = vbNullString, "Not Found", foundVal)

End Function

括号太多,放错地方了。请发布更多的代码。除了这种语法错误(根本不允许代码运行)之外,很难确定是什么导致了特定的错误。是什么让您认为是这一行代码引起了错误?我们确实需要了解更多。
函数FindArchiveFile()作为字符串FindArchiveFile=Application.Intersect(工作表(“文件列表”).UsedRange,工作表(“文件列表”).Range(“B:B”)).Find(CDate(工作表函数.Large(工作表(“文件列表”).Range(“B:B”),2)).Offset(0,-1)。值工作表(“设置”).Range(“LastDate”).Value=Application.Intersect(工作表(“文件列表”).UsedRange,工作表(“文件列表”).Range(“B:B”)).Find(CDate(工作表函数.Large(工作表(“文件列表”).Range(“B:B”),2))).Value-End函数
抱歉格式混乱。谁能帮我纠正一下吗?我不知道如何添加代码作为回复。我把你的代码放在了问题中。这是一个函数;您如何调用该函数?您是从另一个子例程/宏调用它,还是从单元格中的工作表调用它,如
=FindArchiveFile()
?了解工作表上的数据外观也会有所帮助。将图像上载到并在此处发布链接。