使用VBA功能清洁细胞

use*_*046 2 excel vba excel-vba

我想创建一个VBA函数,myFunction(),它在单元格中写入内容,当计算完成时,它将清除它写入的所有数据.(我想从一个单元格中调用它=myFunction())为了清除内容,我将这行放在最后,在完成之前进行清理:

ActiveSheet.Range("$A$1:$B$9").ClearContents
Run Code Online (Sandbox Code Playgroud)

问题是它没有清除任何东西.但是,我注意到如果我将该行放在子程序中,然后将该子程序分配给一个按钮,则单击该按钮时将清除该内容.

当我从程序"Microsoft Visual Basic"的窗口运行代码(使用播放按钮)时,代码完美运行(内容被清除)但是当我从单元格调用该函数时,清洁部分不起作用了.这是代码:

Function myFunction()
  ActiveSheet.Range("$A$1:$B$9").Clear
End Function
Run Code Online (Sandbox Code Playgroud)

当我单击一个单元格并键入时=myFunction(),$ A $ 1:$ B $ 9范围内的内容不会被清除.但是,如果我创建一个子程序(而不是一个函数),并用一个按钮调用它,则清除内容.

当myFunction()调用时,为什么它不起作用?我怎么解决这个问题?

Dav*_*ens 6

当myFunction()调用时,为什么它不起作用?

从Worksheet调用的函数不能操作工作表上的对象,它只能将值返回到调用函数的单元格.我相信这是为了防止循环引用和无限循环.

漏洞是从子程序中调用的函数可以操作工作表对象,但这可能不是一个好习惯.

作为最佳实践,使用子例程来操作对象,并仅使用函数来返回值 - 无论是表单还是子例程.

我怎么解决这个问题?

@Santosh的答案,上面应该可以解决问题.