热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VBA替换是忽略列/表限制

如何解决《VBA替换是忽略列/表限制》经验,为你挑选了1个好方法。

我正在尝试使用VBA进行查找/替换.目标是迭代"Data_Pairs"表,其中包含要查找/替换的所有对,以及在列A中查找/替换这些对,并且在工作簿中指定的工作表范围内(不包括"Data_Pairs") ").

由于某种原因,每个匹配的值都会被替换,无论它在哪个列中.值也会在索引超出定义范围的工作表中被替换.

任何帮助将不胜感激.

我正在使用以下代码:

Sub Replace_Names()

Dim row As Integer
Dim row2 As Integer
Dim sheet As Integer
Dim findThisValue As String
Dim replaceWithThisValue As String

For row = 1 To 10
  Worksheets("Data_Pairs").Activate
  findThisValue = Cells(row, "A").Value
  replaceWithThisValue = Cells(row, "B").Value
  For sheet = 2 To 10
    Worksheets(sheet).Columns("A").Replace What:= findThisValue, Replacement:=replaceWithThisValue     
  Next sheet
Next row
End Sub

给出问题的具体示例:如果Data_Pairs A1 = A且Data_Pairs B1 = 1,则整个工作簿中的每个值1都将替换为A.



1> David Zemens..:

我观察到它在Excel 2010中按预期工作,与上面的Greg和chancea的评论相呼应.

但是,我还观察到,如果您之前已打开FIND对话框(例如,您正在进行一些手动查找/替换操作)并将范围更改为WORKBOOK,则会发生观察到的差异,如下所述:

http://www.ozgrid.com/forum/showthread.php?t=118754

这可能是一种疏忽,因为它似乎从未被解决过.虽然该Replace对话框允许您指定工作簿与工作表,但是没有相应的参数可以传递给Replace方法(文档).

从Ozgrid线程实现hack - 由于某种原因,执行该.Find方法似乎重置了这一点.这似乎有效:

Sub Replace_Names()

Dim row As Integer
Dim row2 As Integer
Dim sheet As Integer
Dim findThisValue As String
Dim replaceWithThisValue As String
Dim rng As Range

For row = 1 To 10
  Worksheets("Data_Pairs").Activate
  findThisValue = Cells(row, "A").Value
  replaceWithThisValue = Cells(row, "B").Value
  For sheet = 2 To 3
    Set rng = Worksheets(sheet).Range("A:A")
    rng.Find ("*")   '### HACK

    rng.Replace What:=findThisValue, Replacement:=replaceWithThisValue
  Next sheet
Next row
End Sub


推荐阅读
author-avatar
译林hy_774
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有