VBA - UDF 以不同方式处理数组

2024-04-02

这段代码是我正在处理的代码的一小部分。我已将问题缩小到以下部分。我有这个 UDF SampleFunction,我需要向其传递一个数组 {3;4} 作为唯一的参数。

Function SampleFunction(InputVar As Variant) As Integer
    SampleFunction = InputVar(LBound(InputVar))
End Function

我用两种不同的方式称呼这个 UDF。一、通过VBA

Case 1:

Sub testSF()
    MsgBox SampleFunction(Array(3, 4))
End Sub

其次,通过我的 Excel 工作表

Case 2:

={SampleFunction(ROW(3:4))}-> 即作为数组函数。

问题:

UDF适用于情况1,即通过VBA调用,它给出了#VALUE当我通过 Excel 工作表调用案例 2 时,出现错误。

对于案例 2,我使用 F8 单步调试了该函数。Lbound(InputVar)计算结果为 1(这与案例 1 中从 sub 调用不同,它的计算结果为 0),但是InputVar(Lbound(InputVar))显示案例 2 中的“下标超出范围”错误。

我想知道的是如何从工作表调用 SampleFunction 函数,即情况 2,因此它具有与上面所示的情况 1 相同的行为。作为奖励,如果有人能解释原因就好了Lbound(InputVar)对上述情况的评价不同。

其他一些细节:

我正在构建一个 UDF 来执行一些正则表达式操作。论点InputVar上面,将是一个数组 {x;y;z;...} 指定第 x, yth, zth ... 出现。数据类型为InputVar保留为 Variant,因为我希望能够将数字(作为单长度数组)、数组或范围(接受并转换为数组)传递给函数。

提前致谢!!


我相信你有两个问题。首先,如果您使用,我认为您的代码不会评估SampleFunction在非数组公式中,即如果 InputVar 是 Range。您需要采用某种方法来处理可以传递到变体中的不同类型的输入。其次,您的代码假设 InputVar 是一维数组。对于任何多维数组,这都会导致错误。这就是这个的来源'Subscript out of range.'错误,因为数组函数将所有数组参数作为二维数组传递,即使它们可以表示为一维数组。

我建议在函数中声明一个新的动态数组,然后将其设置为等于 InputVar。过去,我已经使用如下所示的方法对数组和非数组公式进行了这项工作。另请注意从数组中检索第一项的方式的更改。

Option Explicit
Function SampleFunc(InputVar As Variant) As Integer

Dim tmpArray() As Variant

On Error GoTo ErrHandler
tmpArray = InputVar

'Added extra argument to LBound since dynamic arrays have two dimensions by default.
SampleFunc = tmpArray(LBound(tmpArray, 1), LBound(tmpArray, 2))
Exit Function

ErrHandler:
'Handles the case where InputVar is a Range.
tmpArray = InputVar.Value
Resume Next

End Function

这又快又脏,尤其是。错误处理,但希望基本思想有帮助。

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

VBA - UDF 以不同方式处理数组 的相关文章

  • ArraySlice 中的 Swift [重复]

    这个问题在这里已经有答案了 在数组上使用 prefix 方法后 我得到了所谓的 arraySlice 我怎样才能将其转换为数组 我试图从 FacebookGraphApi 获取 Ints 然后请求前 3 个 前缀 3 并尝试将它们添加到新数
  • JavaScript 数组对 2 个属性进行排序

    我有一个 JSON 对象数组 如下所示 var garments name Garment 1 isDesignable false priority 3 name Garment 2 isDesignable false priority
  • 如何在不滚动的情况下截取整个电子邮件正文?

    我正在使用 OL2010 想要制作整个电子邮件的屏幕截图 不仅仅是 屏幕 可以用VBA或者外部程序来完成吗 有一个类似的问题 https stackoverflow com questions 4176340关于如何使用 C 实现这一点 注
  • C# Byte[] 转 BCD 和 BCD 转 INT

    我有一个由 CashRegister Machine 创建的 Hex 文件 我必须读入这个文件 文件使用下面详述的格式 它就像套接字数据包 代码数据 2字节PLU 代码数据 7 字节单价数据 5字节数量数据 5字节数据总量 5字节PLU 名
  • 查找并替换目录中所有 Excel 文件工作簿中的字符串

    我正在编写 VBA 代码来替换位于特定目录中的多个 Excel 文件 工作簿 中的特定字符串 我尝试在 Stack Overflow 上搜索 找到答案 但这与通过 Excel 中的宏替换文本文件中的字符串有关 相同的链接是查找并替换文件中的
  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • NumPy 和 SciPy - .todense() 和 .toarray() 之间的区别

    我想知道使用是否有什么区别 优点 缺点 toarray vs todense 在稀疏 NumPy 数组上 例如 import scipy as sp import numpy as np sparse m sp sparse bsr mat
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 有没有办法在不使用 foreach 或其他函数的情况下在 PHP 中内爆关联数组的键和值?

    我有一个像这样的关联数组 myarray array a gt 1 b gt 2 c gt 3 我想显示数组键和值 如下所示 a is 1 b is 2 c is 3 我不想使用 print r 或 var dump 来执行此操作 我也不想
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • MS Access - 粘贴确认事件后

    当用户将记录直接粘贴到数据表子报表中时 是否可以在显示粘贴确认消息后捕获事件 我需要它能够在审计表中创建新记录时进行记录 通过捕获更新前 更新后和插入事件 我可以轻松创建已添加的记录集合 准备将详细信息插入审核日志 但是在所有这些事件触发后
  • Angular 4 显示其中的数据

    我不喜欢从 API 返回到我的 Angular 4 应用程序的数据 这是 JSON 的示例 我不关心美元 但这是我正在处理的数据类型 最终目标是在页面上展示 Coin Price BTC 4 281 28 ETH 294 62 etc JS
  • 如何从一维数组和静态字符串创建对象

    我想要一个像 var obj ABC name true dob true CDE name true dob true EFG name true dob true CBA name true dob true XYZ name true
  • 复制一张工作表上的静态范围,然后根据单元格中的单个值粘贴到另一张工作表中的动态范围

    我对这个问题分为三个部分 我在 Sheet1 A1 中有一个带有周数的单元格 我在 Sheet1 B1 F1 中有一个需要复制的静态范围 然后 我需要将该值粘贴到 Sheet2 中的动态范围中 偏移量为行的周数 这是我正在为我经常使用的工作
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • numpy:如何连接数组? (获得多个范围的并集)

    我使用Pythonnumpy 我有一个 numpy 索引数组a gt gt gt a array 5 7 12 18 20 29 gt gt gt type a

随机推荐

  • 如何检查通过联系表 7 提交的电子邮件是否存在于我的数据库中?

    当客户通过联系表 7 提交电子邮件时 如何检查电子邮件是否已存在于我的数据库中并将通知消息更改为 您的电子邮件已存在于我们的数据库中 到目前为止 我已经尝试使用 before send 挂钩 但是当我单击提交时 页面只是挂起并且没有确认消息
  • 如何告诉捆绑程序忽略不存在的宝石?

    我的组织有许多用于自动化测试的内部 gem 但生产部署不需要它们 我正在尝试使用 Bundler 因此在我的 Gemfile 中我将这些 gem 包装在 group test development do gem dashboard sum
  • 对于临时/循环存储来说,最好/最快的 MySQL 表架构是什么?用于会话管理?

    当为非常动态的网站编写自定义 MySQL 数据库驱动的 PHP 会话管理时 会话表的最佳 最快读 写访问 结构是什么 错误示例 未优化 CREATE TABLE session session id VARCHAR 32 NOT NULL
  • 如何忽略 git 存储库根目录中的目录,但将其进一步包含在树中?

    我需要使用 gitignore排除我的存储库根目录中的目录 但是 其他同名目录存在于目录树的更深处 我需要将它们包括在内 看来当我将目录名称放入 gitignore 它捕获所有这些目录 而不仅仅是我需要忽略的目录 我明白那个 gitigno
  • Visual Studio 2015 中未生成 pdb 文件

    我正在开发一个应用程序 使用C MVC 与实体框架 数据库优先 VS 2015 我创建了一个单独的项目数据层访问 当我在调试或发布模式下构建此项目时 不会生成调试文件 即 pdb file 请告诉我 我怎样才能生成这个 pdb我的项目的文件
  • 更新到 v4.8.0 后 phpMyAdmin 出现错误:$cfg['TempDir'] (./tmp/) 无法访问

    phpMyAdmin在 v4 7 9 上运行良好 今天更新到 v4 8 0 后 替换旧的phpmyadmin文件夹与新文件夹 我在 phpMyAdmin 中收到此消息 cfg TempDir tmp 不可访问 phpMyAdmin 无法 缓
  • ansible if else 构造

    这是我的 if else Ansible 逻辑 name Check certs exist stat path etc letsencrypt live rootDomain fullchain pem register st inclu
  • 带有 Google 卫星图层的 Leaflet Map API [重复]

    这个问题在这里已经有答案了 我对此非常感兴趣传单地图API http leaflet cloudmade com 但是 我需要能够使用 Google 卫星层 我无法找到有关如何将 Google 卫星图层添加到 Leaflet 的示例 我知道
  • Java 中的范围滑块

    大家好 我想知道是否有人听说过提供范围滑块的 Java 组件 滑块 即带有两个旋钮 用于定义最小最大值的范围 而不仅仅是一个 我在网上找到了 perfuse 库中的 JRangeSlider 但我有两个问题 首先 但不是那么重要 是它有自己
  • PHP cURL:如何将正文设置为二进制数据?

    我正在使用一个 API 它希望我发送一个 POST 其中包含文件中的二进制数据作为请求的正文 如何使用 PHP cURL 完成此任务 与我想要实现的目标等效的命令行是 curl request POST data binary myimag
  • 未找到信号器集线器 (403)

    是的 所以我看到了很多与此相关的问题 但建议的修复方案都对我不起作用 我有一个在 Visual Studio 2012 IIS Express 中运行的 MVC4 项目 使用 SignalR 向用户提供一些反馈 当我运行该项目时 我在 Ch
  • 无法通过 SSH 访问 Vagrant VM(不使用 vagrant ssh)

    在准备调整结构部署脚本以与本地 Vagrant VM 配合使用时 我试图说服 VM 让我通过 SSH 连接到它而不使用vagrant ssh 我不断收到错误 我尝试了很多不同的设置组合 但这是最新的 Vagrant 文件 Vagrant c
  • 无法使用故事板将窗口连接到 IBOutlet

    我正在尝试访问 AppDelegate 中的窗口 如果我创建一个没有故事板的新 OSX Cocoa 项目 那么 AppDelegate 包含一个窗口变量 如下所示 class AppDelegate NSObject NSApplicati
  • 在 Spring Boot 中通过 JPA 正确利用纪元秒

    我想将数据库中的所有日期存储为纪元秒 以消除时区歧义 我正在使用JpaRepository http docs spring io spring data jpa docs current api org springframework d
  • Ruby 获取可用磁盘驱动器

    谁能告诉我如何获取 ruby 中可用磁盘驱动器的列表 我正在创建一个开放文件对话 需要知道 预先感谢 嗯 Brian 给出的文章正确地指出了以下代码 require win32ole file system WIN32OLE new Scr
  • 按真实角度旋转位图

    曾几何时 读书这个问题 https stackoverflow com q 7690388 757830 我想知道如何将位图旋转任意角度 而无需自己摆弄所有位 最近 其他人 https stackoverflow com q 1046441
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接
  • R - 使用键连接数据帧,然后使用近似日期

    问题 我正在尝试使用 3 个 ID 列 或者 1 列 如果我将 3 个粘贴在一起 合并两个数据帧 其中之一是日期时间变量 并且两个数据帧之间的变化最多为 1 秒 背景 我有两个从带有交易记录的库中提取的数据帧 由于某种原因 签出和签入是分开
  • 为什么我在尝试从可变数组中删除时收到“发送到不可变对象的变异方法”?

    我不明白为什么我在这段代码中得到 发送到不可变对象的变异方法 该数组必须以某种方式是不可变的 但我不知道为什么 界面 interface SectionsViewController UIViewController
  • VBA - UDF 以不同方式处理数组

    这段代码是我正在处理的代码的一小部分 我已将问题缩小到以下部分 我有这个 UDF SampleFunction 我需要向其传递一个数组 3 4 作为唯一的参数 Function SampleFunction InputVar As Vari