[英]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
的用途和時間。
另外,請檢查為變量選擇哪種數據類型以及原因。 查看其局限性和用法示例。
了解如何使用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.