ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yuanzhuping

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-7-9 11:46 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
经典的东东,新手注册,做个记号,虚心学习!

TA的精华主题

TA的得分主题

发表于 2010-7-9 15:44 | 显示全部楼层

现在才开始学习,有个疑问:

原帖如下:
第1部分Range(单元格)对象
技巧5         查找单元格
5-1        使用Find方法
#001  Sub RngFindNext()
#002      Dim StrFind As String
#003      Dim Rng As Range
#004      Dim FindAddress As String
#005      StrFind = InputBox("请输入要查找的值:")
#006      If Trim(StrFind) <> "" Then
#007          With Sheet1.Range("A:A")
#008              Set Rng = .Find(What:=StrFind, _
#009                              After:=.Cells(.Cells.Count), _
#010                              LookIn:=xlValues, _
#011                              LookAt:=xlWhole, _
#012                              SearchOrder:=xlByRows, _
#013                              SearchDirection:=xlNext, _
#014                              MatchCase:=False)
#015              If Not Rng Is Nothing Then
#016                  FindAddress = Rng.Address
#017                  Do
#018                      Rng.Interior.ColorIndex = 6
#019                      Set Rng = .FindNext(Rng)
#020                  Loop While Not Rng Is Nothing And Rng.Address <> FindAddress
#021              End If
#022          End With
#023      End If
#024  End Sub

代码解析:
       RngFindNext过程在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并将查到单元格底色设置成黄色。
       第8行到第17行代码使用Find方法在工作表Sheet1的A列中查找。
       第16行代码将查找到的第一个单元格地址赋给字符串变量FindAddress。
       第18行代码将查找到的单元格底色设置成黄色。
       第19行代码使用FindNext方法进行重复搜索。FindNext方法继续执行用Find方法启动的搜索。查找下一个匹配相同条件的单元格并返回代表单元格的Range对象,语法如下:
expression.FindNext(After)
       参数expression是必需的,返回一个Range对象。
       参数After是可选的,指定一个单元格,查找将从该单元格之后开始。
       第20行代码如果查找到的单元格地址等于字符串变量FindAddress所记录的地址,说明A列已搜索完毕,结束查找过程。

疑问代码部分:
#015              If Not Rng Is Nothing Then
#016                  FindAddress = Rng.Address
#017                  Do
#018                      Rng.Interior.ColorIndex = 6
#019                      Set Rng = .FindNext(Rng)
#020                  Loop While Not Rng Is Nothing And Rng.Address <> FindAddress
既然FindNext(Rng)是从当前单元格之后搜索,则Rng.Address 永远也不会等于 FindAddress,即:
#020                  Loop While Not Rng Is Nothing And Rng.Address <> FindAddress中的And Rng.Address <> FindAddress是多余的!

这部分代码(#015  至#020  )可简化为:
     Do While Not Rng Is Nothing
                   Rng.Interior.ColorIndex = 6
                     Set Rng = .FindNext(Rng)
                 Loop


不知道我理解的正不正确?望高手指点!谢谢!

TA的精华主题

TA的得分主题

发表于 2010-7-9 15:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-11 17:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-11 21:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-12 10:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个,实在是非常优秀的资料啊!最近为工作要做个工作表,研究VBA呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-12 17:21 | 显示全部楼层
原帖由 我是我妈的宝贝 于 2010-7-9 15:44 发表
原帖如下:
第1部分Range(单元格)对象
技巧5         查找单元格
5-1        使用Find方法
#001  Sub RngFindNext()
#002      Dim StrFind As String
#003      Dim Rng As Range
#004      Dim FindAddre ...

这样会死循环的。

TA的精华主题

TA的得分主题

发表于 2010-7-12 18:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-12 20:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-7-13 18:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-28 11:52 , Processed in 0.047891 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表