Excel UDF #VALUE!错误

时间:2017-12-07 13:54:05

标签: excel user-defined-functions valueerror

以下代码计数在将数据输入数组后,唯一名称的数量是特定列。在即时窗口中运行时,它可以正常工作。但是当用作UDF时,它会抛出#Value Error。我将所有数据放入一个数组并检查数组并从中获取一个数字并返回它。我没有修改任何Excel工作表或更改工作表的环境。请帮助!! 1

Public Function Operator_Count(Aircraft As String) As Integer

Dim Aircraft_Name As String
Dim Data_Array() As Variant
Dim Row_Count As Integer
Dim Col_Count As Integer
Dim Col_Alph As String
Dim Row_Counter As Integer
Dim Master_Series_Column As Integer
Dim Status_Column As Integer
Dim Operator_Column As Integer
Dim InnerLoop_Counter As Integer
Dim Operator_Array() As Variant
Dim Operator_Array_Transpose() As Variant
Dim Array_Counter As Integer
Aircraft_Name = Aircraft
Operator_Count = 0

'ThisWorkbook.Sheets("Aircraft Data").Activate

Row_Count = ThisWorkbook.Sheets("Aircraft Data").Range("A2", Range("A2").End(xlDown)).Rows.Count
Col_Count = ThisWorkbook.Sheets("Aircraft Data").Cells(1, Columns.Count).End(xlToLeft).Column
Col_Alph = ColumnLetter(Col_Count)

Data_Array = ThisWorkbook.Sheets("Aircraft Data").Range("A1:" & Col_Alph & Row_Count + 1).Value2

For Row_Counter = 1 To Col_Count

    If Data_Array(1, Row_Counter) = "Master Series" Then

    Master_Series_Column = Row_Counter

    End If

Next

For Row_Counter = 1 To Col_Count

    If Data_Array(1, Row_Counter) = "Status" Then

    Status_Column = Row_Counter

    End If

Next



For Row_Counter = 1 To Col_Count

    If Data_Array(1, Row_Counter) = "Operator" Then

    Operator_Column = Row_Counter

    End If

Next


'Resizing the data array
ReDim Operator_Array(0, 0)
'Adding column to the data array
InnerLoop_Counter = 0
For Row_Counter = 1 To UBound(Data_Array)

    If Data_Array(Row_Counter, Master_Series_Column) = Aircraft_Name And (Data_Array(Row_Counter, Status_Column) = "In Service" Or Data_Array(Row_Counter, Status_Column) = "On order") Then

        Flag = 0
                    For Array_Counter = 0 To UBound(Operator_Array, 2)

                        If Operator_Array(0, Array_Counter) = Data_Array(Row_Counter, Operator_Column) Then
                            Flag = 1
                            Array_Counter = UBound(Operator_Array, 2)
                        End If
                     Next

                     If Flag <> 1 Then
                         ReDim Preserve Operator_Array(0, InnerLoop_Counter)
                         Operator_Array(0, InnerLoop_Counter) = Data_Array(Row_Counter, Operator_Column)
                         InnerLoop_Counter = InnerLoop_Counter + 1
                     End If

     End If

Next

Operator_Count = UBound(Operator_Array, 2)


End Function


Function ColumnLetter(ColumnNumber As Integer) As String
    Dim n As Integer
    Dim c As Byte
    Dim s As String

    n = ColumnNumber
    Do
        c = ((n - 1) Mod 26)
        s = Chr(c + 65) & s
        n = (n - c) \ 26
    Loop While n > 0
    ColumnLetter = s
End Function

0 个答案:

没有答案