提问人:Chris Lewis 提问时间:11/14/2023 最后编辑:Chris Lewis 更新时间:11/14/2023 访问量:24
LibreOffice Calc 输入框和数学表达式
LibreOffice Calc Input Box and mathematical expressions
问:
我想使用输入框来获取数学表达式(1+7、6-2、1+5-6 等),并使用宏来计算该表达式。我尝试使用 Expression(),但这似乎没有任何作用。我认为这不是 LibreOffice BASIC 的一部分......
这是我尝试过的。
Function GetUserInput() As Double
Dim InputValue As Variant
' Prompt the user for input
InputValue = InputBox("Enter a number or mathematical expression:", "Input Required")
' Treat empty input as 0
If InputValue = "" Then
GetUserInput = 0
Else
' Attempt to evaluate the input as a mathematical expression
On Error Resume Next
GetUserInput = Evaluate(InputValue)
On Error GoTo 0
' Check for errors in evaluation
If Err.Number <> 0 Then
MsgBox "Invalid expression. Assuming 0.", vbExclamation, "Invalid Input"
GetUserInput = 0
End If
End If
End Function
每当我输入表达式时,它都会说“输入无效”。
编辑--
我需要通过输入框获取公式,而不是直接从单元格中获取公式。这一切都是通过单击按钮驱动的,该按钮要求用户输入,然后将该输入与已经在 spredsheet 中的更可预测的数据一起使用。在大多数情况下,输入单个整数,但有时,我需要能够捕捉到一个简单的加法和/或减法公式。
好吧,需求并不准确。我只是想看看我是否能让它工作。这只是一种方便。
爬过笑话电子表格(我假设这就是你所指的)我需要撕开字符串才能得到数字和运算符?所以没有直接的方法来处理这个问题?
答:
1赞
JohnSUN
11/14/2023
#1
该函数可以非常简单 - 通过从用户那里获取一个字符串并尝试计算值:GetUserInput()
InputBox()
Function GetUserInput() As Variant
Dim InputValue As String
InputValue = InputBox("Enter a number or mathematical expression:", "Input Required")
GetUserInput = evalFormula(InputValue)
End Function
从文本字符串计算值的所有工作都可以通过以下函数完成:
Function evalFormula(sTextFormula As String) As Variant
Dim sFullFormula As String
Dim oTempDoc As Variant, oWrkCell As Variant
GlobalScope.BasicLibraries.isLibraryLoaded("Tools")
oTempDoc = CreateNewDocument("scalc")
oWrkCell = oTempDoc.getSheets().getByIndex(0).getCellByPosition(0, 0)
sFullFormula = Trim(sTextFormula)
If Left(sFullFormula, 1) <> "=" Then sFullFormula = "=" & sFullFormula
oWrkCell.setFormula(sFullFormula)
oTempDoc.calculate()
If oWrkCell.getError = 0 Then
evalFormula = oWrkCell.getDataArray()(0)(0)
Else
evalFormula = oWrkCell.getString()
EndIf
oTempDoc.close(True)
End Function
测试代码:
Sub testInputBox
MsgBox "Result is " & GetUserInput()
End Sub
下一个:SAS 宏取消引用
评论
eval()