ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: lm3312

[求助] 关于长于254字符的计算式结果问题?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 11:30 | 显示全部楼层
ykcbf1100 发表于 2024-2-19 19:51
试试这个,不是我写的,据说32位和64位通用。

其中,oDom可以定义为 Dim oDom As Object
那么,oW 应该定义为哪种数据类型?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 11:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
gglili 发表于 2024-2-20 10:48
老师,看看这是什么问题

你先按下面的代码使用,有问题再来看。


Function eval(aa)
    Dim oDom As Object
    Dim oW
    eval = ""
    On Error GoTo ERR00 '''防止报错
    Set oDom = CreateObject("htmlfile")
    Set oW = oDom.ParentWindow
    oW.execScript " var aa=eval(" & aa & ");"
    eval = oW.aa '''获取计算结果
    Set oDom = Nothing
    Set oW = Nothing
ERR00:
End Function



TA的精华主题

TA的得分主题

发表于 2024-2-20 11:46 | 显示全部楼层
lm3312 发表于 2024-2-20 10:26
我不懂这些,只会用。请问你能用VBScript 来解决这个问题吗?

sc.Language = "vbscript" 他说的是
不过 你eval写错了 eval必须是小写
https://club.excelhome.net/forum ... amp;_dsign=3ad5775a
还有64bit 没有MSScriptControl.ScriptControl

TA的精华主题

TA的得分主题

发表于 2024-2-20 11:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-2-20 11:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 16:51 | 显示全部楼层
perfect131 发表于 2024-2-20 11:48
125 楼参考:
https://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=1134923&pid=11131 ...

这个方法,有以下几个问题:
1、很多时候计算结果舍为整数,这肯定是不行的。
2、当计算式少于254字符时,有的计算结果是错误的,比如:1+2-3*4/5^2+6^(1/3)
我觉得,这个方法计算的错误率太大,不能用。

TA的精华主题

TA的得分主题

发表于 2024-2-20 17:03 | 显示全部楼层
本帖最后由 时间的音符 于 2024-2-20 17:04 编辑
lm3312 发表于 2024-2-20 16:51
这个方法,有以下几个问题:
1、很多时候计算结果舍为整数,这肯定是不行的。
2、当计算式少于254字符 ...

还真是.........
不过用我写的类模块 计算是对的.
计算.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
时间的音符 发表于 2024-2-20 17:03
还真是.........
不过用我写的类模块 计算是对的.

我不会用类模块,无法测试。而且,复杂的方法,使用起来限制太多,也不方便使用。

TA的精华主题

TA的得分主题

发表于 2024-2-20 17:20 | 显示全部楼层
本帖最后由 时间的音符 于 2024-2-20 17:21 编辑
lm3312 发表于 2024-2-20 17:13
我不会用类模块,无法测试。而且,复杂的方法,使用起来限制太多,也不方便使用。

js会算错 是因为把^当成异或运算了.哈哈.
类模块很简单导入类模块,在过程中建立一个类模块,然后调用里面的函数就可以了.
哈哈.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-20 17:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gglili 发表于 2024-2-20 10:48
老师,看看这是什么问题

先前的eval()代码,在测试过程中,发现问题很多,暂时不建议使用。

如果你需要在平常的计算中使用自定义函数来计算结果,不妨先使用下面我编的代码,待以后有更好的解决方法了再说。


'JS(计算式[,小数位])——返回计算表达式的结果
'注意:
'1、计算表达式为正常的数学表达式;
'2、计算表达式中可以使用大多数工作表数学函数;
'3、计算表达式不能有全角或特殊字符;
'4、计算表达式长度不得超过254字符
Function JS(JSS, Optional XSW As Integer = 22)
    Dim JG
    If Len(JSS) = 0 Then JS = 0: Exit Function
    If IsNumeric(JSS) = False Then
        JG = Evaluate("=" & JSS)
        If IsNumeric(JG) = False Then JS = Evaluate(""): Exit Function
    Else
        JG = JSS
    End If
    '结果取整
    If XSW < 0 Then    '在小数点左侧进行四舍五入
        JS = Application.WorksheetFunction.Round(JG, XSW)
    Else    '保留整数或在小数点右侧进行四舍六入
        JS = Round(JG, XSW)
    End If
End Function

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-30 04:18 , Processed in 0.046517 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表