vba 求助

qq_41628636 2020-01-16 02:32:22
求大佬看一看我这段代码哪里有问题
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_)的时候他提示报错 要求对象。
...全文
435 点赞 收藏 3
写回复
3 条回复
Aron Wong 2020年06月08日
回复后能挣积分吗?
回复 点赞
%T% 2020年03月10日
0基础想学VBA,没有资源也不能下载!!
回复 点赞
潘姿吟� 2020年01月20日
不知道理解的对不对: 我的理解是楼主想在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赋值。 希望有所帮助,感谢你的问题,让我今天学到很多,笔芯。
回复 点赞
发动态
发帖子
Office开发/ VBA
创建于2007-08-27

4459

社区成员

1.7w+

社区内容

其他开发语言 Office开发/ VBA
社区公告
暂无公告