仅在活动工作表上运行Excel VBA脚本,而不是整本书?

我正在使用VBA脚本本质上查找/replace。 现在,当我运行VBA脚本时,它将应用于工作簿中所有打开的工作表。 我希望VBA脚本仅适用于活动表格,而不要触摸其他表格。

这是我目前的macros代码:

Sub ReplaceCC() ' ' ReplaceCC Macro ' Add CC to Distributor, Reseller, Government and Retail. ' ' Range("A1").Select Cells.Replace What:="Distributor", Replacement:="DistributorCC", LookAt:= _ xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="Reseller", Replacement:="ResellerCC", LookAt:=xlPart _ , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="Government", Replacement:="GovernmentCC", LookAt:= _ xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="Retail", Replacement:="RetailCC", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub 

这是整个VBA脚本与所有潜艇。

我遇到了同样的问题。 这取决于查找/replace历史logging:如果在之前手动使用查找/replace,您指定了“选项”>“在工作簿中search”,则您的macros将应用于所有工作表。 否则,使用默认的“工作表”,macros将保留在原始工作表中。 不过,我仍然不知道如何解决这个问题。

有趣的问题。 我相信你可以通过简单地在你的代码中的每个对象引用之前放置“ActiveSheet”来做你想做的事情。

例如:代替Range("A1").Select使用ActiveSheet.Range("A1").select

如果你这样设置你的代码,每当你执行的时候,它应该在你当前激活的工作表上执行它的操作。

编辑:你应该检查,看看哪个模块,你有这个代码放入。如果是在插入模块,我认为你应该没问题。 另一方面,如果您已将其插入到其中一个工作表模块中,则只会修改所连接的工作表。 如果在单元格引用之前插入ActiveSheet ,其余部分仍将修改活动工作表而不是代码所附的表。

看起来这个macros是不能正确识别活动页面的,因为这些页面是相互拷贝的。 如果您复制工作表1上的内容并创build一个新工作表,然后粘贴上的内容,这将工作。 每张纸必须是独一无二的,而不只是原件的副本。

这是由于VBA的错误。 在VBA中使用“查找”时,参数“LookAt:= xlPart”或“LookAt:= xlWhole”按预期工作。 但是当您使用“replace”时,编码参数将被忽略,并且replace使用其范围的最后一个MANUAL设置。 解决方法是在“Replace”操作之前执行“Find”操作,因为“Find”使用编码的“LookAt”范围(从而使“Find”范围成为最后一个设置,所以“Replace”将会然后使用范围编码到“查找”)。

来自http://www.vbaexpress.com/forum/showthread.php?11444-Solution-Replace-in-a-sheet-and-not-the-entire-workbook的解决scheme

 Dim dummy As Range Set dummy = Worksheets(1).Range("A1:A1").Find("Dummy", LookIn:=xlValues) 

然后,您可以在这些代码行下面发布REPLACE函数