VBA Range.Replace 第二次不行
VBA Range.Replace does not work second time
我是 VBA 的新手。我创建了 2 个按钮。按钮仅用于更改单元格中数据的来源 sheets。例如,我从 sheet "ecommerce(D2C)" 中提取数字,当我单击 SaaS 按钮时,它会从 sheet "SaaS" 中提取数据。对于电子商务按钮,反之亦然。为此,我只是使用了 Range.Raplace 方法。但问题是,SaaS 按钮有效,从 sheet“SaaS”获取数字,但是当我单击“电子商务”时,它不会将数字从“SaaS”sheet 更改回“电子商务”sheet。如果你能帮我解决这个问题,我会很高兴。我不知道我在哪里犯了错误,因为我对它们都使用了几乎相同的代码。
Sub SaaS()
Cells.Select
Selection.Replace What:="ecommerce(D2C)", Replacement:="SaaS", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A1").Select
End Sub
Sub Ecommerce()
Cells.Select
Selection.Replace What:="SaaS", Replacement:="ecommerce(D2C)", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A2").Select
End Sub ```
我想我可以重现您遇到的行为。我必须做的是从 ecommerce(D2C)
更改为 Ecommerce
(考虑到这是工作表名称)。如果您尝试将 Replace
方法与会导致公式不正确的内容一起使用,它什么也不做。
Sub SaaS()
Cells.Select
Selection.Replace What:="Ecommerce", Replacement:="SaaS", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A1").Select
End Sub
Sub Ecommerce()
Cells.Select
Selection.Replace What:="SaaS", Replacement:="Ecommerce", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A2").Select
End Sub
此方法对“电子商务(D2C)”失败,因为Excel 要求您将此类型的sheet 名称放在单引号内以便在公式中使用:例如"='ecommerce(D2C)'!A1"
.
一旦你点击“Saas”按钮,它就变成了"='SaaS'!A1"
,但是那个不需要单引号,所以Excel自动调整为"=SaaS!A1"
。所以,现在,当您尝试再次将其切换回来时,它将失败,因为您要求 Excel 创建对 "=ecommerce(D2C)!A1"
的引用,而它不允许这样做。
因此,修复很简单,添加两个单引号:
Sub Ecommerce()
Cells.Select
Selection.Replace What:="SaaS", Replacement:="'ecommerce(D2C)'", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A2").Select
End Sub
我是 VBA 的新手。我创建了 2 个按钮。按钮仅用于更改单元格中数据的来源 sheets。例如,我从 sheet "ecommerce(D2C)" 中提取数字,当我单击 SaaS 按钮时,它会从 sheet "SaaS" 中提取数据。对于电子商务按钮,反之亦然。为此,我只是使用了 Range.Raplace 方法。但问题是,SaaS 按钮有效,从 sheet“SaaS”获取数字,但是当我单击“电子商务”时,它不会将数字从“SaaS”sheet 更改回“电子商务”sheet。如果你能帮我解决这个问题,我会很高兴。我不知道我在哪里犯了错误,因为我对它们都使用了几乎相同的代码。
Sub SaaS()
Cells.Select
Selection.Replace What:="ecommerce(D2C)", Replacement:="SaaS", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A1").Select
End Sub
Sub Ecommerce()
Cells.Select
Selection.Replace What:="SaaS", Replacement:="ecommerce(D2C)", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A2").Select
End Sub ```
我想我可以重现您遇到的行为。我必须做的是从 ecommerce(D2C)
更改为 Ecommerce
(考虑到这是工作表名称)。如果您尝试将 Replace
方法与会导致公式不正确的内容一起使用,它什么也不做。
Sub SaaS()
Cells.Select
Selection.Replace What:="Ecommerce", Replacement:="SaaS", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A1").Select
End Sub
Sub Ecommerce()
Cells.Select
Selection.Replace What:="SaaS", Replacement:="Ecommerce", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A2").Select
End Sub
此方法对“电子商务(D2C)”失败,因为Excel 要求您将此类型的sheet 名称放在单引号内以便在公式中使用:例如"='ecommerce(D2C)'!A1"
.
一旦你点击“Saas”按钮,它就变成了"='SaaS'!A1"
,但是那个不需要单引号,所以Excel自动调整为"=SaaS!A1"
。所以,现在,当您尝试再次将其切换回来时,它将失败,因为您要求 Excel 创建对 "=ecommerce(D2C)!A1"
的引用,而它不允许这样做。
因此,修复很简单,添加两个单引号:
Sub Ecommerce()
Cells.Select
Selection.Replace What:="SaaS", Replacement:="'ecommerce(D2C)'", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A2").Select
End Sub