使用 (Application.function) 和 (WorksheetFunction.function) 之间有什么区别/好处?

2024-03-13

事实上,我试图使用一个范围作为自动筛选的标准。

因此,我使用转置函数将范围转换为一维数组。

然后我使用了这段代码:

arr = WorksheetFunction.Transpose(rng.value)

还发现使用Application代替WorksheetFunction是相同的结果。

arr = Application.Transpose(rng.value)

除了 Intellisense 建议之外,使用 (Application.w 函数)和(WorksheetFunction.function)?


两种使用方式之间的主要区别在于WorksheetFunction提出一个致命错误,停在相应的黄色代码线上并且Application does not,在同样的情况下,如果出现任何错误。

的情况下WorksheetFunction,您只能使用来处理错误On Error Resume Next,这限制了使用函数 return 的可能性,而且它也不是那么优雅。

在某些(罕见)情况下,两种方式都会返回相同的函数是不同的。我的以下答案不会提及这些特性,它将显示两种情况下引发错误的示例,但主要集中于使用所创建的优势和可能性Application代替WorksheetFunction:

如果您使用:Debug.Print WorksheetFunction.VLookup("code",A2:F1000,3, False)它将提供智能感知建议,但会引发运行时错误('1004'):'无法获取 WorksheetFunction 类的 VLookup 属性',如果没有任何匹配Lookup_value in Table_array.

Using

Debug.Print Application.VLookup("code",A2:F1000,3, False) 'does not raise a run-time error
'it will return Error 2042

乍一看,这似乎没什么大不了的,但它为使用不同的行为方式提供了很多可能性。

让我们研究一个非常通用的函数:Match

我不会使用WorksheetFunction如果不匹配,它总是会引发运行时错误。我只会关注Application.Match优点:

Sub testApplicationMatchAdvantages()
  Dim ret, arr
  arr = Array(1, 3, 6, 9, 11)
  arr = Split("1, 3, 6, 9, 11", ", ")
  ret = Application.match("5", arr, 0)
  If IsError(ret) Then Debug.Print "5" & " does not exist in the array...": 'Exit Sub
  ret = Application.match("9", arr, 0)
  If IsNumeric(ret) Then
    Debug.Print 9 & " is the " & ret & "th element of the array and it will be removed:"
    arr = filter(arr, arr(ret - 1), False) 'arr(ret)-1 because arr is zero based
    Debug.Print Join(arr, "|") '9 has been removed
  Else
    Debug.Print 9 & " does not exist in the array...": Exit Sub
  End If
  Dim arr2, arr3
  arr2 = Array(1, 3, 4, 9)
  arr2 = Split("1, 4, 3, 9", ", ")
  arr3 = Application.IfError(Application.match(arr2, arr, 0), "X")
  
  Debug.Print Join(arr3, "|") 'meaning that the first element in arr2 matches the first one in arr
                              'and the third one, matches the second of arr
  'using:
  arr3 = Application.match(arr2, arr, 0) 'it returns a 1 based array, but it cannot be returned by joinning
                                         ' because of Error 2042 elements
  Dim i As Long
  For i = 1 To UBound(arr3)
    Debug.Print arr3(i);
  Next i
End Sub

你还可以玩Application.Index, Application.VLookup它们还能够返回播放宽度的数组。

综上所述,Application跳过运行时致命错误并提供许多使用返回的可能性。无论是否有错误,都是包含错误编号元素的数组。不能使用以下方法处理WorksheetFunction...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 (Application.function) 和 (WorksheetFunction.function) 之间有什么区别/好处? 的相关文章

  • 从多页表单中获取活动控件名称和值

    我已经在网上寻找解决方案几个月了 但没有成功 我创建于Excel 2010 a UserForm与多页 我正在尝试编写一个函数来获取activecontrol名称和值 到目前为止 我已经成功使用此命令获取了控件的名称Me MultiPage
  • 如何在 C# 中将 excel ListObject 添加到给定工作表?

    我目前正在 C 中开发一个 Excel 插件 其中包含多种方法 表值函数 可供 Excel 用户和程序员 VBA 使用 如何编写一个方法 将新的 ListObject Excel 表 添加到给定的 Excel 工作表 并将给定的 DataT
  • Excel Active-X 按钮无法单击

    我有一个在 Excel 中应该可以点击的按钮 当我尝试单击它时 什么也没有发生 我注意到 如果我单击并按住右下角的鼠标 则会出现第二个按钮 这种情况过去发生过 当我移动鼠标单击该按钮时 我可以单击 一切都会正常 但这一次 当我移动鼠标时 按
  • 将Excel数据转换为特定的JSON格式

    我收到一个 Excel 文件 xlsx 如下所示 行和列的数量可以变化 例如 它也可以如下所示 对于第一张图片中的 Excel 工作表 JSON 应如下所示 value Prename Nik Age 17 Country Switzerl
  • 数据透视和运行时错误 1004:应用程序定义或对象定义的错误

    我对宏和 VBA 编码很陌生 我正在尝试创建一个非常简单的宏 它从包含 33 列的表中获取数据并将其转换为数据透视表 只有最后 3 列 31 32 33 包含数字 我需要将其显示在枢轴上 因为我想比较当前月份 上个月以及逐月的变动 到目前为
  • 在 C# 中更改 Excel 单元格格式

    如何使用 C 中的 Microsoft Excel 12 0 库更改 Excel 中单元格的格式 更具体地说 我想将给定单元格更改为文本格式 我读过了 net c 改变Excel单元格格式 https stackoverflow com q
  • 使用 C# 在 Powerpoint 2013 中创建具有多个系列的图表

    我使用的是 VS2013 Ultimate 带有 Office 2013 已安装 PowerPoint Excel 和 Word 我正在用 C 编码 我正在使用 C 创建 PowerPoint 演示文稿 到目前为止 我已经成功地完成了我想做
  • 通过vba在每个空间范围之间添加求和公式

    我试图进行自动化 但我被困在这里 我需要在空间范围之间动态添加总和公式 我完全迷失了使用 VBA 添加公式的能力 任何人都可以帮助我 先感谢您 我假设您想要的是 如果单元格中有空白 您希望将所有其他元素相加并将结果放置在该空白中 可能有很多
  • 在 Excel 2010 中添加基本功能区的 VBA 代码?

    我已经使用产品在 C addin express 中为 Excel 编写功能区 但我需要知道如何使用 vba 生成功能区 有人能为我提供一些代码来为此在工具栏中插入一个额外的功能区吗 我所说的功能区是指上面写着 公式 数据 评论 等的地方
  • 使用 VBA 在另一个 Access 实例中打开特定窗体

    所以我在这里四处查看并找不到我的问题的答案 至少不完全是 案例如下 我在 DBase1 中 想要单击一个按钮并在单独的访问实例中打开 DBase2 中的 NeuSteckbrief 表单 我设法使用以下代码在单独的实例中打开 DBase2
  • Apache POI - FileInputStream 工作,文件对象失败(NullPointerException)

    我尝试将所有工作表从一个工作簿复制到另一工作簿 问题是 如果我通过 FileInputStream 读取工作簿 它可以正常工作 但它不适用于文件对象 考虑以下方法 import java io BufferedReader import j
  • excel中的多轴折线图

    我正在寻找类似于下图中的多轴折线图 这是由 amcharts 制作的 JavaScript 图表 excel有没有可以绘制图表的选项 请注意 有 3 个 Y 轴和 3 个折线图 可让您比较数据 是否有可能获得超过 3 个数据点 每个数据点在
  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • 在 vba 上将值粘贴到另一个工作簿工作表上时出现问题

    我有以下代码 以便从工作簿复制工作表并将其粘贴到另一个名为 Control de precios 的工作簿的工作表 1 上 Sub createSpreadSheet Set NewBook Workbooks Add With NewBo
  • 有没有任何方法可以使用 openpyxl 获取 .xlsx 工作表中存在的行数和列数?

    有没有任何方法可以使用 openpyxl 获取 xlsx 工作表中存在的行数和列数 在xlrd中 sheet ncols sheet nrows 将给出列数和行数 openpyxl中有这样的方法吗 给定一个变量sheet 可以通过以下方式之
  • 通过文本自动创建到另一个工作表的超链接

    我想知道如何基于各自工作表中两个单元格具有的相同文本值 通过脚本自动创建从一个 Excel 工作表到另一个 Excel 工作表的超链接 如果这可以在没有脚本的情况下完成 使用某种公式 如 VLOOKUP 这将是更好的选择 谢谢你的时间 使用
  • 当行数 = 0 时删除 Excel 列中的单元格

    我试图删除电子表格中某一列中的所有单元格 0 并 召唤 不在该列顶部的值 我目前正在使用 Dim row index As Integer Dim col index As Integer row index 7 col index 16
  • 更改索引设置访问 VBA

    我正在尝试自动化 Access 中的流程 我希望自动化的步骤之一是更改表中某些字段的索引设置 我需要这样做来提高后续查询的速度 使用索引查询速度大约快 100 倍 无论如何 假设我的表名为 Cars 如下所示 ID Name Charact
  • 检查所选单元格是否在特定范围内

    我正在使用 C 创建 Excel 加载项 如何检查选定的 或代码中范围表示的单元格 是否在特定范围内 例如如何检查单元格 P 5 是否在 A 1 Z 10 范围内 Use Application Intersect 像这样 在VBA中 Su
  • VBA rand 如何使用上限和下限生成随机数?

    所以也许这是多余的 也许这就像问为什么大多数人生来就有 5 个手指 最后的简短答案总是 因为事情就是这样 而且它就是这样工作的 但我讨厌这个答案 该死的我想知道怎么做VBA 中的 Rnd 函数有效 Ms Office Excel 的 MSD

随机推荐