WPS表格中使用JS宏对单元格赋值的一个问题

写了一个简单的JS宏

📌

function testabc()

{

Sheets.Item(1).Range("H1").Value2 = "1234"

return "abcsdef";

}

1、通过“开发工具”-“JS宏”,选择这个宏,可以正常执行,且单元格H1也正常赋值为1234。

2、但如果选中一个单元格,并在公式栏填上"=testabc()",回车后显示为#VALUE!,且单元格H1没有被赋值。

3、如果把面的宏中的“Sheets.Item(1).Range("H1").Value2 = "1234"”这行去掉,再在公式栏填上"=testabc()",回车即可正常执行,且单元格H1被正确赋值。

想知道第2次为什么会失败?

目的是想对一个单元格应用一个宏,完成对其他多个单元格的赋值,便又不是通过手动点击宏来执行。

谢谢!

湖南省
浏览 8041
收藏
2
分享
2 +1
11
+1
全部评论 11
 
邹应锋
邹应锋

@金山办公

这个是因为在单元格中引用这个函数,这个函数在et计算时被执行,et在计算状态是禁止改变内核数据的,不然在计算时改变了内核数据,内核数据的改变又引发计算,这样就循环依赖了。所以在自定义函数中涉及到改变内核数据的接口都会执行失败。
· 广东省
1
回复
 
拾光漫行
拾光漫行

WPS函数专家

感觉在单元格写的时候是做普通函数用,不能操控其他单元格,就报错了,没执行后面的return,返回的就是错误项,感觉直接在程序里运行吧。看了下图片感觉应该能实现,不过需要看具体的需求
· 重庆
回复
拾光漫行
拾光漫行

WPS函数专家

直接代码实现 不在单元格写函数实现了
· 重庆
回复
 
五月
我试了下按你这个写法,得输入公式后,点击显示计算步骤——>求值,显示H1单元格的值
· 陕西省
回复
五月
你这样的写法应该是有问题的,可以详细描述一下需求
· 陕西省
回复