簡體   English   中英

excel VBA對於每個循環,范圍錯誤#VALUE

[英]excel VBA For each loop for range error #VALUE

我已經在excel VBA中通過定義的函數使用了每個循環,但函數輸出為#VALUE。 我認為錯誤是在我的循環內,如下所示:

謝謝大家的評論。 我的功能代碼如下,我已更正了我發送的原始代碼:

Public Function MaxWindDir(warr As Range) As Integer
Dim WindDir() As Integer
Dim maxwindsp As Integer
Dim wcell As Range
Dim i As Integer
Dim MaxDir As Integer
i = 0
maxwindsp = Application.Max(warr)
For Each wcell In warr
    If wcell.Value = maxwindsp Then
        WindDir(i) = Range("J" & wcell.Row).Value
        i = i + 1
    End If
Next wcell
If i = 1 Then
    MaxWindDir = WindDir(0)
Else
    MaxDir = WindDir(0)
    For i = 0 To UBound(WindDir)
        If WindDir(i) >= MaxDir Then
            MaxDir = WindDir(i)
        End If
    Next i
    MaxWindDir = MaxDir
End If
End Function

請幫我解決這個錯誤。

發生錯誤是因為您的WindDir數組是無尺寸的,所以WindDir(i)...行將引發錯誤。

在循環中迭代地重新定義數組的格式不是很好的形式,但是下面在代碼中添加的ReDim Preserve行顯示了我的意思:

For Each wcell In warr
    If wcell.Value = maxwindsp Then
        ReDim Preserve WindDir(i)
        WindDir(i) = Range("J" & wcell.Row).Value
        i = i + 1
    End If
Next wcell

您的帖子也提出了其他幾點:

  1. 也許考慮在開發UDF時從模塊中調用它們。 這樣,任何錯誤都會更有意義地顯示給您。 如果您運行以下例程,並按發布后的方式調用函數,那么未標注尺寸的數組問題將立即突出顯示:

     Public Sub RunMe() Dim r As Range Set r = Sheet1.Range("K2:K19") 'or whatever the range is Debug.Print MaxWindDir(r) End Sub 
  2. 為什么要為陣列煩惱呢? 假設您在第一個循環中訪問WindDir值,為什么不只檢查那里的最大值? 這樣,您的整個功能可能只是:

     Public Function MaxWindDir(warr As Range) As Long Dim wcell As Range Dim maxWindSpd As Long Dim windSpd As Long Dim windDir As Long maxWindSpd = Application.Max(warr) For Each wcell In warr.Cells windSpd = wcell.Value2 If windSpd = maxWindSpd Then windDir = warr.Worksheet.Cells(wcell.Row, "J").Value2 If windDir >= MaxWindDir Then MaxWindDir = windDir End If Next End Function 
  3. 請注意@Comitern關於Range限定符的觀點(以及我相當笨拙的嘗試,即忠實於您發布的代碼,同時仍然限定范圍)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM