excel VBA应用程序,使用从“1”到“4”的参数值对()求值

nkoocmlb  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(150)

所以我有下面这个测试代码:

Public Sub runTest()

    Dim result As String
    
    result = Application.Evaluate("4")
    MsgBox "ss"
End Sub

每当我尝试将数字1、2、3、4作为参数添加到Application.Evaluate时,它都会失败,并出现以下错误:

我有以下Excel版本:微软® Excel® a微软365 MSO(2206构建版本16.0.15330.20260)64位
我所能抓到的东西多了一件:如果我选择运行时对象Application.Evaluate(“4”),它会返回一个OLE对象(?),但Application.Evaluate(“5”)是双精度的。

为什么?这有什么意义?
---更新---
我添加了这张图片,以查看我所知道的关于这件事的所有信息:

9avjhtql

9avjhtql1#

正如documentation中所解释的,Application.Evaluate的目的是 * 将Microsoft Excel名称转换为对象或值 *,而不是其他任何东西。这与它的规则有关,其中一个规则是:
此方法可使用Microsoft Excel中的下列名称类型:

  • ...
    ***表单控件编号。**您可以指定编号和名称来引用工作表上的表单控件。例如,对于工作表上的标签(“开发工具”选项卡-“插入”-“表单控件”-“标签”),Evaluate("Label 1").Caption = "Hello"Evaluate("1").Caption = "Hello"的作用相同。

该工作表上必须有四个Form控件,因此Evaluate("1")-Evaluate("4")会传回它们。Evaluate("5")不会传回,因为您没有第五个Form控件。

8yoxcaq7

8yoxcaq72#

我也遇到过类似的情况,我想让用户输入简单的数学表达式作为数量。他们可以输入.5 + .5,它会计算为1。但如果他们输入1,它会失败,因为1被解释为工作表上的按钮。
我想出了这个解决办法:

Dim userQuant As Variant
userQuant = InputBox("Please enter the needed quantity.", "Quantity")
userQuant = Application.Evaluate("0 + " & userQuant)

相关问题