运行时错误' 91':对象变量或未设置块变量

时间:2015-08-20 19:03:26

标签: excel vba function runtime

希望你能帮我调试这个错误。 Macro之前完美运行,我没有做任何更改,现在面临变量错误 - 运行时错误' 91':对象变量或With块变量未设置。

在dubug上突出显示该行:ValueFound = FindValue(RangeHeader.Text,TableCollection)。 FindValue是另一个功能。

功能A:

Function Alpha(aTableCollection As Collection)

    Dim Sheet As Worksheet
    Dim RangeHeader As Range
    Dim RangeValue As Range
    Dim TableCollection As Collection
    Dim SupplierName As String
    Dim Counter
    Dim endColumn As Integer

    Set TableCollection = New Collection
    Set TableCollection = aTableCollection

    SupplierName = aTableCollection.Item(4)

    With Sheets("Suppliers").Range("B:B")
        Set Rng = .Find(What:=SupplierName, After:=.Cells(.Cells.count), LookIn:=xlValues, LookAt:= _
                    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
        Set Sheet = ActiveSheet
        Set RangeHeader = Range("A1")
    End With

    ValueFound = Beta(RangeHeader.Text, TableCollection)

    RangeValue.Offset(0, 1).FormulaR1C1 = ValueFound

    endColumn = Sheet.UsedRange.Columns.count

    Counter = 1 
    While Counter < endColumn 
        ValueFound = Beta(RangeHeader.Offset(0, Counter).Text, TableCollection)
        RangeValue.Offset(0, Counter).FormulaR1C1 = ValueFound
    Counter = Counter + 1 
    Wend

End Function

功能测试版:

Function Beta(aNameToFind As Variant, aCollection As Collection) As Variant

Dim MyObject As Variant
Dim count As Integer

For Each MyObject In aCollection    
    count = count + 1
    If aNameToFind = MyObject Then   
        count = count + 1
        Beta = aCollection.Item(count)  
        Exit For
    End If 
Next

End Function

如果有人有任何想法如何解决此错误(并且可能知道为什么它最近才开始显示此错误),我们将不胜感激。

需要澄清,只要问一下。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我怀疑问题出在Beta()。

它包括两行:

$language

我怀疑这会导致从集合中返回错误的项目。

尝试删除上述第二行。

实际上,Beta()例程看起来毫无意义。为什么不用这一行完全跳过它:

$message = ...;
$language = ...;
...;
if(!in_array($language, array('english', 'german', 'french'), true))
    $language = 'english';
$sql = "select " . $language . " from table where message=? LIMIT 1";
if($stmt = $mysqli->prepare($sql)) {
    $stmt->bind_param("i", $message);
}