2014-09-19 3 views
4

У меня есть две очень похожие функции, которые работали до того, как я переключил свой код на Option Explicit для отладки пупок (успех!). С тех пор функция Max не работает, и я не могу объяснить причину и решить ее как xl vba perfect noob.Excel VBA - функция min max диапазона

  • Функция Max (не работает):

    Function MaxAddress(The_Range) As Variant 
    ' See http://support.microsoft.com/kb/139574 
    
    Dim MaxNum As Variant 
    Dim cell As Range 
    
        ' Sets variable equal to maximum value in the input range. 
        MaxNum = Application.Max(The_Range) 
        ' Loop to check each cell in the input range to see if equals the 
        ' MaxNum variable. 
        For Each cell In The_Range 
        If cell.Value = MaxNum Then 
         ' If the cell value equals the MaxNum variable it 
         ' returns the address to the function and exits the loop. 
         MaxAddress = cell.Address 
         Exit For 
        End If 
        Next cell 
    
    End Function 
    
  • Ошибка выполнения:

    я получаю "ошибка 91" в режиме исполнения, с Xmax valuing: "Nothing" Ошибка 91 означает: undefined object или With block variable

  • В мин функции (работы)

    Function MinAddress(The_Range) As Variant 
    ' See http://support.microsoft.com/kb/139574 
    
    Dim MinNum As Variant 
    Dim cell As Range 
    
        ' Sets variable equal to maximum value in the input range. 
        MinNum = Application.Min(The_Range) 
        ' Loop to check each cell in the input range to see if equals the 
        ' MaxNum variable. 
        For Each cell In The_Range 
        If cell.Value = MinNum Then 
         ' If the cell value equals the MaxNum variable it 
         ' returns the address to the function and exits the loop. 
         MinAddress = cell.Address 
         Exit For 
        End If 
        Next cell 
    
        End Function 
    

Как назвать обе функции:

Set rng = ws_source.Range("3:3") 
X_min = MinAddress(rng) 
X_max = MaxAddress(rng) ' returns : X_max = Nothing 

Данные находятся в строке 3, содержащий отформатированные номера и текста ,

+0

Я не могу воспроизвести эту ошибку – Horaciux

+0

Уверен, что это выглядит сложной задачей. – hornetbzz

+1

Если вы получаете X_max как Nothing, то X_max является переменной объекта, которая не подходит. Используйте 'Dim X_max as String' – Rory

ответ

4

(не ответ, но слишком большой для комментария)

У меня есть следующий в нормальном модуле, и он отлично работает:

Function MaxAddress(The_Range) As Variant 
' See http://support.microsoft.com/kb/139574 

Dim MaxNum As Variant 
Dim cell As Range 

    ' Sets variable equal to maximum value in the input range. 
    MaxNum = Application.Max(The_Range) 
    ' Loop to check each cell in the input range to see if equals the 
    ' MaxNum variable. 
    For Each cell In The_Range 
    If cell.Value = MaxNum Then 
     ' If the cell value equals the MaxNum variable it 
     ' returns the address to the function and exits the loop. 
     MaxAddress = cell.Address 
     Exit For 
    End If 
    Next cell 

End Function 

Sub xxx() 
Dim rng As Range 
Dim X_max As String 
Set rng = ThisWorkbook.Sheets(1).Range("3:3") 
X_max = MaxAddress(rng) 
MsgBox (X_max) 
End Sub 
+0

Thx! Вы поняли: Dim X_max As String – hornetbzz

4

Не знаю, почему мин работает, но я считаю, что он должен быть

Application.WorksheetFunction.Max 

&

Application.WorksheetFunction.Min 
Смежные вопросы