首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VBA -替换单元格公式中的文本

Excel VBA -替换单元格公式中的文本
EN

Stack Overflow用户
提问于 2018-04-03 14:53:56
回答 2查看 10K关注 0票数 4

我在Excel VBA编码中遇到了一件奇怪的事情。

我有一个满是公式的工作表,每个公式都引用其他工作表中的单元格。

这是单元格A1中的示例公式,例如:

代码语言:javascript
复制
=IF('General Inputs & Summary'!B6="","",'General Inputs & Summary'!B6)

我想要动态更改公式中的旧选项卡名称,并使用新的选项卡名称。

当我尝试此代码时:

代码语言:javascript
复制
oldStr = "'General Inputs & Summary'"
newStr = "'test'"  
Range("A1").Formula = Replace(Range("A1").Formula, oldStr, newStr)

其结果是:

代码语言:javascript
复制
=IF(test!B6="","",test!B6)

而不是:

代码语言:javascript
复制
=IF('test'!B6="","",'test'!B6)

您看,单引号会自动删除,因此新公式将失败!

对此有什么解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 15:55:09

您可以做的是将公式读取为字符串,在字符串中替换,然后将字符串作为新公式传递,如下所示:

代码语言:javascript
复制
Sub TestMe()

    Dim oldStr$, newStr$

    oldStr = "'General Inputs & Summary'"
    newStr = "'test'"
    newStr = Replace(Range("A1").Formula, oldStr, newStr)
    Range("A1").Formula = newStr

End Sub

要演示',请看下面的示例:

代码语言:javascript
复制
Sub TestMe()

    Dim a As Range
    Dim b As String
    Set a = Range("A1")

    b = "'12"
    a = b

    Debug.Print a 'prints 12
    Debug.Print b 'prints '12

End Sub

A1中的单元格被格式化为文本并包含',但打印值中没有它。

编辑:通常情况下,只有当工作表名称包含空格时才需要',就像下面这样- General Inputs & Summary。如果名称中没有空格,例如test,则不太需要它,因此此示例也适用:

代码语言:javascript
复制
Public Sub TestMe()

    Dim a As Range: Set a = Range("A1")
    Dim oldStr$, newStr$

    a.Formula = "=IF('GI S'!B6="","",'GI S'!B6)"

    oldStr = "'GI S'"
    newStr = "'test'"
    Range("A1").Formula = Replace(Range("A1").Formula, oldStr, newStr)

End Sub
票数 0
EN

Stack Overflow用户

发布于 2018-04-03 17:18:05

谢谢你Vityata的精彩解释,这让我找到了答案!

问题是,宏“首先”替换了公式中的名称(即测试),然后创建了新的选项卡"test“。

例如,如果在sheet1中设置此公式,则单元格A1:

代码语言:javascript
复制
=test2!A1

(请注意,您尚未创建test2工作表)

所以很明显你得到了#REF!错误。

但是,如果您随后创建test2选项卡(通过宏或手动),并返回并检查sheet1中的单元格A1公式(也通过保存文件进行刷新),它仍然显示#REF!错误,即使现在test2选项卡真的存在!(您需要双击该单元格,然后按enter键,才能进行更新)

因此,我更改了宏,使其首先创建test选项卡,然后操作这些公式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49623964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档