Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6209|回复: 8

[已解决]vba控制替换范围

[复制链接]
发表于 2013-5-18 00:41 | 显示全部楼层 |阅读模式
excel替换时检索场所不管选择的是工作表还是整个工作薄,录制宏后发现代码都一样。如果我选择在工作表内搜索一次(搜索对话框内),这个时候执行宏就是工作表内替换;如果选择在整个工作薄内搜索一次,这个时候执行宏就是整个工作薄内替换。请问这个要如何指定范围来控制是工作表还是整个工作薄?
最佳答案
2013-5-19 00:29
yearharvest 发表于 2013-5-18 22:33
难道就没人知道吗?

1  REPLACE 方法 替换范围

经反复测试 ,Replace 方法 的 替换范围是由 查找和替换 对话框 中的 范围 选项 决定的

如果 范围 选择为 工作表,则只对代码中 设定的区域 进行查找替换(你说的第1种情况)
301059-VBA-REPLACE方法区域范围设定1.jpg

如果 范围 选择为 工作簿,则不管代码中是否设定了区域,都对整个工作簿进行查找替换。(也就是你说的第2种情况)
301059-VBA-REPLACE方法区域范围设定2.jpg

2  REPLACE 方法 替换范围可否由VBA代码设定?

通过查看  Replace 方法 参数,没有发现 对 该范围进行设定的参数,由此推断,这个范围只能由手工设定。
设定的替换范围有记忆功能。设定一次后,如果不修改,始终是按照该范围进行。


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-18 00:49 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-5-18 17:20 | 显示全部楼层
那么的帅 发表于 2013-5-18 00:49
代码发过来

代码只是录制宏得到的

Sub Macro1()

    Cells.Replace What:="123", Replacement:="abc", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub
回复

使用道具 举报

发表于 2013-5-18 17:48 | 显示全部楼层
yearharvest 发表于 2013-5-18 17:20
代码只是录制宏得到的

Sub Macro1()

如果替换工作簿中,就按照你的代码就可以了。
如果至替换当前工作表中的内容,需要先选择,然后替换如:
  1. Sub Test()
  2.     Range("A1:D8").Select
  3.     Selection.Replace What:="0", Replacement:="q00", LookAt:=xlPart, _
  4.         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  5.         ReplaceFormat:=False
  6. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-5-18 18:23 | 显示全部楼层
happytiger2012 发表于 2013-5-18 17:48
如果替换工作簿中,就按照你的代码就可以了。
如果至替换当前工作表中的内容,需要先选择,然后替换如:

如果随便搜索一次(范围选择工作表),然后在执行宏就变成只能替换当前工作表;如果在搜索一次(这次选择工作薄),现在执行宏就变成替换全部工作薄。而且你的代码也一样,就算选择了区域也没用,甚至连当前工作表内区域外的也会被替换
回复

使用道具 举报

 楼主| 发表于 2013-5-18 22:33 | 显示全部楼层
难道就没人知道吗?
回复

使用道具 举报

发表于 2013-5-19 00:29 | 显示全部楼层    本楼为最佳答案   
yearharvest 发表于 2013-5-18 22:33
难道就没人知道吗?

1  REPLACE 方法 替换范围

经反复测试 ,Replace 方法 的 替换范围是由 查找和替换 对话框 中的 范围 选项 决定的

如果 范围 选择为 工作表,则只对代码中 设定的区域 进行查找替换(你说的第1种情况)
301059-VBA-REPLACE方法区域范围设定1.jpg

如果 范围 选择为 工作簿,则不管代码中是否设定了区域,都对整个工作簿进行查找替换。(也就是你说的第2种情况)
301059-VBA-REPLACE方法区域范围设定2.jpg

2  REPLACE 方法 替换范围可否由VBA代码设定?

通过查看  Replace 方法 参数,没有发现 对 该范围进行设定的参数,由此推断,这个范围只能由手工设定。
设定的替换范围有记忆功能。设定一次后,如果不修改,始终是按照该范围进行。


回复

使用道具 举报

 楼主| 发表于 2013-5-19 14:47 | 显示全部楼层
那么的帅 发表于 2013-5-19 00:29
1  REPLACE 方法 替换范围

经反复测试 ,Replace 方法 的 替换范围是由 查找和替换 对话框 中的 范围 ...

也就是说用replace是不能控制范围了,那只能自己写个函数读取工作表内每个单元格然后再进行替换。我在帮助里面随便乱搜到时找到一个类XlSearchWithin里面有两个成员xlWithinSheet和xlWithinWorkbook,看起来像是不过不知道怎么用?
回复

使用道具 举报

发表于 2019-6-4 17:09 | 显示全部楼层
用find方法可以控制切换回工作表范围,如果需要工作簿替换,可以使用循环工作簿方式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 09:32 , Processed in 0.411689 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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