Excel 工作表功能所需的对象

Excel 工作表功能所需的对象,excel,vba,object,worksheet-function,Excel,Vba,Object,Worksheet Function,我有一个带有两个下拉列表的用户表单,我在公式中使用这些列表的值来向用户显示结果。我在将公式结果存储在变量中并在消息框中显示时遇到问题。我有下面的代码,但是它抛出了一个“objectrequired”错误。我见过一些将结果放入单元格的公式示例,但我不需要将值显示在消息框之外的任何位置。有没有关于是什么导致我的代码失败的想法 Dim selBranch As String Dim selSkillTitle As String Dim result As Variant selBranch = f

我有一个带有两个下拉列表的用户表单,我在公式中使用这些列表的值来向用户显示结果。我在将公式结果存储在变量中并在消息框中显示时遇到问题。我有下面的代码,但是它抛出了一个“objectrequired”错误。我见过一些将结果放入单元格的公式示例,但我不需要将值显示在消息框之外的任何位置。有没有关于是什么导致我的代码失败的想法

Dim selBranch As String
Dim selSkillTitle As String
Dim result As Variant

selBranch = frmQuery.cboBranch.Value
selSkillTitle = frmQuery.cboSkillTitle.Value

result = WorksheetFunction.AverageIfs(skill_prof, branch, selBranch, skill_title, selSkillTitle)

MsgBox "Query Result" & vbNewLine & "--------------" & vbNewLine & _
    "Branch: " & branch & vbNewLine & _
    "Skill Level: " & skillTitle & vbNewLine & vbNewLine & _
    "Average Skill Proficiency: " & CStr(result), vbInformation


skill\u prof
branch
skill\u title
都是我的工作簿中的命名范围

WorksheetFunction.AverageIfs(..)
将使用一些范围变量,而不是未声明的空变量

您提到它们是命名范围,因此您需要正确的语法来引用它们,可能有多种方式,这里有一种:

Dim skill_prof as range: Set skill_prof = Worksheets("WhicheverSheet").Range("skill_prof")
'Etc

以上内容将确保您可以在代码中使用相同的公式。只需确保这些命名范围的大小相等=)

哪一行抛出错误?您在哪里设置了这些范围变量?'result='行抛出错误。我从来没有设置过这些范围变量,我想Excel会知道它们是命名范围,但猜测这不对=如果它们是命名范围,那么您需要将它们作为
range(“命名范围”)
处理,您的猜测是对的。谢谢!这是可行的(当我逐步执行时,我会得到变量的结果),但是我在msgbox行上得到类型不匹配,即使我将结果声明为字符串并在sheet.function行上执行CStr。我在想msgbox中的所有内容都必须是字符串?不管上面是什么…我知道我做错了什么。谢谢你的回答,这很好用。它不必是字符串@Sudio。变量是一个数字,只需将其连接起来即可<代码>…&结果