如何使用VBA查找或替换功能定义“内部”匹配条件?

时间:2018-06-29 04:49:27

标签: excel vba excel-vba

对此也有类似的问题,但没有一个能解决我的问题。

我有一个基本上可以批量查找/替换的工具。我定义了一组带有关键字占位符的数据“模板”,然后提供了模板实例定义的列表,这些实例定义了这些占位符的值,并且该工具将模板复制的次数与我拥有模板实例的次数一样多,并查找/替换占位符。

查找/替换代码使用:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
For iParam = LBound(gsaXMLParams) To UBound(gsaXMLParams)
    Selection.Replace What:=gsParamSymbol & gsaXMLParams(iParam) & gsParamSymbol, Replacement:=gsaXMLParamVals(iInstance, iParam), LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
Next

我只想替换当前的工作表。麻烦的是,替换函数中没有“内部”参数,而是替换函数使用了在Excel查找/替换工具中设置的当前设置的“内部”条件。如果将其设置为“工作簿”,那么我所有的工作表都将替换其单元格(如果匹配替换条件)。

我也尝试使用Range.Replace产生相同的问题。

enter image description here

如何通过编程方式设置“内”标准?

示例数据: 例如。模板:

|Area|.|SiteName|.Metering.Value
|Area|.|SiteName|.Enclosure.Door

例如模板实例定义

Area     SiteName
Area 1   John's Town
Area 2   Peter's Town

例如输出

Area 1.John's Town.Metering.Value
Area 2.Peter's Town.Metering.Value

2 个答案:

答案 0 :(得分:2)

您所说的“内部”是Range.Replace Method的父母。

当您使用Range(“ A1”)。Font.Color = vbRed时,您正在设置A1字体的颜色,因此Color是Font的属性,而Font是Range的属性,特别是Range(“ A1 “)。

因此,如果您使用Worksheets(“ Sheet1”)。Cells.Replace what:= ...,replacememt:= ......方法,那么您将在Sheet1的单元格上执行该操作,并且仅对那些单元格执行该操作在前面的示例中设置字体颜色只能在A1中设置红色字体。目前,您正在根据所选内容进行替换。

答案 1 :(得分:0)

多做一次谷歌搜索,似乎没有一个“合适的”解决方案,但是在任何“替换”调用之前使用以下第一行将重置“查找/替换”工具选项,包括将“内部”重置为“ Sheet” :

Set r = Worksheets(1).Range("A1").Find(What:="This will reset the Find/Replace tool options, including setting Within=Sheet")
Range("A1:B10").Replace(.....)