簡體   English   中英

如何設置范圍為變量?

[英]How to set range to variable?

我正在嘗試將另一個工作表的范圍保存到變量,然后將其與單元格進行比較。 我有以下代碼:

Function collectUtfall(A1 As String, Ax As String)
Dim rng As Variant
Dim sum as Integer

sum = 0

Set rng = Sheets("Utfall").Range("N2").Value <------- This line

If rng = Ax Then
        sum = sum + 10
        Else: sum = 33

End If

collectUtfall = sum
End Function

問題在於它沒有按照我希望的方式運行。 我收到#Value錯誤,並且將其范圍縮小到代碼中標記的行。 如果刪除該行,我不會收到錯誤,但結果當然只有0。

我也嘗試將rng設為Range,但不起作用。

可能是什么問題?

編輯:原來的問題解決了,但遇到了另一個。 如果我使用此代碼(稍有改動),則會再次遇到相同的錯誤。 我使用的偏移量錯誤還是現在問題出在哪里?

Function collectUtfall(A1 As String, Ax As String)
Dim rng As Variant
Dim sum As Integer

sum = 0

rng = Sheets("Utfall").Range("M2:O272").Value

If rng.Offset(0, 1) = Ax Then
    sum = sum + 10
    Else: sum = 33

End If


collectUtfall = sum
End Function

Set rng =不需要“ Set”; 去掉它。

rng = Sheets("sheet1").Range("N2").Value

您的代碼有幾個問題。

我建議您開始學習Set的用途和時間。

DimSet之間的區別 -Doug Glancy提供

另外,請檢查為變量選擇哪種數據類型以及原因。 查看其局限性和用法示例。

了解如何使用Ranges 何時使用.Value,何時不使用。 當您將變量指向單個單元格以及何時指向多個單元格時。

了解如何遍歷 Range集合。

閱讀有關代碼縮進的內容。

之后,您將可以編寫自己的代碼:

Function collectUtfall(A1 As String, Ax As String)

    Dim rng As Range
    Dim sum As Long: sum = 0

    Set rng = Sheets("Utfall").Range("M2:O272")

    Dim cell As Range
    For Each cell In rng
        If StrComp(cell.Offset(0, 1).Text, Ax, vbTextCompare) = 0 Then
            sum = sum + 10
        Else
            sum = 33
        End If
    Next

    collectUtfall = sum
End Function

您可能有沖突的數據類型。 如果Ax是字符串類型,則應將字符串與之比較。 您可以將rng定義為字符串(將dim rng定義為字符串),或執行cstr:

If CStr(Rng) = Ax Then

暫無
暫無

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

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