求大佬看一看我這段代碼哪里有問題
Sub test()
Dim date_ As String
Dim range_ As Range
Dim i As Integer
Dim range2 As Range
date_ = "201801"
Set range_ = Range(Cells(8, 1), Range("A8").End(xlDown))
Do While date_ <> "201813"
Set range2 = rowaa(range_, date_)
date_ = date_ + 1
Loop
End Sub
以下是函式
Public Function rowaa(range_ As Range, date_ As String)
For Each i In range_
If Not (i.Value Like ("*" & date_ & "*")) Then
Exit For
End If
Set rowaa = i
Next
End Function
在do while第二遍運行到Set range2 = rowaa(range_, date_)的時候他提示報錯 要求物件。
uj5u.com熱心網友回復:
不知道理解的對不對:我的理解是樓主想在A8單元格往下的A列里面,依次找到包含“201801”,“201802”,..., "201812" 的所有字符格當中最后出現的那個,并回傳該字符。
如果是這樣,那么有兩處可能可以修改:
1、Dim range2 As Range 改成: Dim range2 As String 或者直接不寫range2的dim
理由:rowaa的回傳值存盤到range2變數中,而rowaa的回傳值是個string
2、函式rowaa的回圈,如果按照樓主的寫法
If Not (i.Value Like ("*" & date_ & "*")) Then
Exit For
那么如果在A8格沒有出現包含date_的形狀,就直接退出回圈,不再遍歷A8向下的單元格
所以建議改成:
For Each i In range_
If (i.Value Like ("*" & date_ & "*")) Then
rowaa = i
End If
Next
最后附上程式:
Public Function rowaa(range_, date_)
For Each i In range_
If (i.Value Like ("*" & date_ & "*")) Then
rowaa = i
End If
' Debug.Print rowaa
Next
End Function
Sub test()
Dim date_ As String
Dim range_ As Range
Dim i As Integer
Dim range2 As String
date_ = "201801"
' Sheets("Sheet1").Activate
Set range_ = Range(Cells(8, 1), Range("A8").End(xlDown))
Do While date_ <> "201813"
range2 = rowaa(range_, date_)
Sheets("Sheet1").Range("A1") = range2
date_ = date_ + 1
' Debug.Print date_
Loop
End Sub
本人最近在刻苦鉆研VBA,今天看了程式也是報錯很多次,總結出來什么時候要用set來給變數賦值:
給物件變數(如:range,worksheet,collection)賦值才要用Set;普通變數(如integer, string)賦值不用(其實給普通變數賦值是用let,不過let可省略)
所以本程式中只有在 range_ 那里需要用set賦值。
希望有所幫助,感謝你的問題,讓我今天學到很多,筆芯。
uj5u.com熱心網友回復:
0基礎想學VBA,沒有資源也不能下載!!
uj5u.com熱心網友回復:
回復后能斬訓分嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36720.html
