【发布时间】:2022-01-11 20:46:27
【问题描述】:
我写了一个函数,你把列名作为字符串和行号。然后它转到那个单元格并在 formula 内部发生变化,比如说 sheet1 到 sheet2
但是当我应用它时,excel 多次关闭。能有什么道理。这是代码
Public Function formchange( c As String, n As Integer, Optional valueLookFor As Variant, Optional valueChangeTo As Variant) As Variant
valueLookFOr ='sheet1'
condOne = ThisWorkbook.ActiveSheet.Range(c & n).Find(What:= valueLookFor)
valueChangeTo = 'sheet2'
If condOne <> 0 Then
ThisWorkbook.ActiveSheet.Range(c&n).Replace(valueLookFor,valueChangeTo).Select
End If
End Function
【问题讨论】:
-
你到底是如何“应用”它的?
-
在 Excel 电子表格中。在公式栏上......这是你要求的吗? =formchange("F";7;"sheet1";"sheet2")
-
你不能
.Select使用.Replace的单元格,如果在该单元格中找不到该值,Find将返回Nothing而不是0。此外,对于 Find,您希望使用更多标准来确保您正在查看公式,并且您正在查看字符串的一部分而不是完整的字符串。此外,不需要查找,因为如果找不到要替换的值,替换不会出错。此外,从工作表调用的 UDF 不能对单元格进行更改,只能将值返回到它调用的单元格,除非您进行一些 hack。 -
与您的主要问题无关,您可能会从阅读How to avoid using Select in Excel VBA 中受益。
-
简短的回答:不要从单元格中调用它,将其设为
Sub,并解决上述所有问题。