问题标签 [paramarray]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
57 浏览

excel - 返回 i 给定项目的所有第 j 个元素的函数

我想编写一个函数,返回 i 给定项目的所有第 j 个元素。这些项目包含单个单元格、单元格范围或两者。

虽然可以返回所有元素(test1),每个第一个元素(test2),但我无法返回每秒(或更高)的元素。

给定一个 Excel 表

=test1((B2;C2;D2);B3:D3;(B4:C4;D4))返回X 1 333 Y 2 666 Z 3 999

=test2((B2;C2;D2);B3:D3;(B4:C4;D4))返回X Y Z

但是=test3((B2;C2;D2);B3:D3;(B4:C4;D4))返回Y 2 3,这是错误的。它应该返回1 2 3

在此处输入图像描述

VBA 函数的代码如下:

如何正确处理特定元素?

0 投票
3 回答
124 浏览

excel - 使用用户定义的函数通过 ParamArray 传递数组

VBA 新手。对于用户定义的函数,以下代码有两个问题。我不知道如何通过 ParamArray 传递数组。

1) bool() 的打印类型应该是 8203。但是 test() 的打印类型是 8204,所以它们是空的或无效的。编辑:有人指出 8204 是由于 Variant 类型。

2) 我不确定我是否使用“A(0)(1,1)”正确调用嵌套数组中的元素。我无法在 Test() 函数中打印或调用 A() 中的值。

在单元格公式中:

在 VBA 编辑器中:

ParamArray 是必要的,我只是没有用这个例子说明原因。

0 投票
0 回答
80 浏览

excel - 将数组作为 List 传递给 ParamArray

我想将数组中的值传递给带有 ParamArray 的函数,就像我分别从数组中传递每个值一样。

简化示例以进一步解释我的问题:

SomeNativeFunction上例中我一开始调用的方式MyArray会交给 0 中的位置args,所以args(0) = MyArray. 但相反,我需要args(0) = MyArray(0),args(1) = MyArray(1)等。就像我在第二个函数调用中所做的那样。问题是,MyArray 可能有不同数量的参数,因此硬编码实际上并非在所有情况下都有效,或者至少会变得非常混乱。

我想以这种方式调用的 subs/functions 由 Excel 或其他来源提供,因此无法更改它们。

0 投票
2 回答
158 浏览

excel - Nesting ParamArrays when declaring Excel VBA functions like SUMIFS?

Consider the following example: Lets say you want to make a function "JoinIfs" that works just like SUMIFS except instead of adding the values in the SumRange, it concatenates the values in "JoinRange". Is there a way to nest the ParamArray as it seems to be done in SUMIFS?

SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)

I imagine the declaration should look something like this:

But nothing I try seems to compile and there might not be a way to nest ParamArrays. But the existence of functions like SUMIFS and COUNTIFS seems to suggest there might be a way to nest the ParamArrays.

This question duplicates AlexR's question Excel UDF with ParamArray constraint like SUMIFS. But that was posted a few years ago with no response so either the question didn't get enough attention or it was misunderstood.

Edit for clarification: This question is specifically about nesting ParamArrays. I'm not trying to find alternative methods of achieving the outcome of the example above. Imagine nesting ParamArrays on a completely different fictional function like "AverageIfs"

0 投票
1 回答
32 浏览

excel - 如何将一个函数接收到的 paramarray 参数传递(传递)到 vba 中的第二个函数?

在 VBA 中,有时您可能希望将不确定数量的参数传递给函数。在 VB 世界中,paramarray 处理这些。但是,如果需要反过来将其传递给子功能怎么办?

在这里的挑战中,我有几个不同的地方可以格式化字符串,插入后续值,例如:

tx = SetSQL("UPDATE tabA SET cd={1} WHERE id={2}", "'123'", 89)

根据情况,可能有 1 个或n 个参数。

当我直接处理所有 SQL 时,这很有效。例如:

set rsNEW = currentdb.execute (SetSQL("UPDATE tabA SET cd={1} WHERE id={2}", "'123'", 89))

但是,后来我发现我有几种情况会重复相同的处理,有时我想将其中的一些重构为一个更全面的调用。我想包装SetSQL另一个例程的内部。例如:

public sub DoMyDBThing("UPDATE tabA SET cd={1} WHERE id={2}", "'123'", 89)

这使我处于需要将 a 转移paramarray到 a的情况下paramarray

0 投票
0 回答
20 浏览

vba - 使用 VBA 组装列表以传递给期望 ParamArray 的函数

在一个关于VBA 的问题中:向 Instr 传递多个值John Coleman 发布了一个“包含”函数,该函数接受多个搜索字符串,然后将这些搜索字符串输入 Instr 进行检查,这对我来说很棒并且效果很好。但是,它需要在设计时编写搜索字符串列表(据我所知),并且我希望能够创建从电子表格上不同位置收集的搜索字符串的动态列表。所以在他的功能中,我会这样称呼它;

我希望能够更像这样称呼它;

然后,我尝试查看是否可以动态组合我的条目,然后将结果传递给他的函数,但无法使用 2 种不同的方法这样做;

所以我希望能够创建一个搜索词列表,该函数将接受这些搜索词来进行多词搜索。谢谢阅读。

0 投票
1 回答
132 浏览

excel - 使用 ParamArray 分配宏:公式太复杂,无法添加到对象

公式太复杂的消息

我有一个宏(如下),它使用 ParamArray 将新行插入到未定义数量的命名范围中,它工作正常,除了当我尝试为宏分配超过 5-6 个参数时,我收到一个消息框,上面写着“公式太复杂而无法分配给对象”(见上图)

(请参阅下面的分配字符串)

'InsertNewRow "ServiceCrewDay_EmployeeList"、"SAP_SCD_InPool"、"SAP_SCD_OutPool"、"SAP_SCD_SecondaryIn"、"SAP_SCD_SecondaryOut"、"SAP_SCD_ORD"、"SAP_SCD_THF"、"SAP_SCD_LH"、"SAP_SCD_LH"'

宏:

宏本身按预期运行,只是分配导致问题的命名范围。有一个更好的方法吗?

或者有没有办法绕过公式太复杂的方法?如果需要在所有最终用户 PC 上或仅在我的 PC 上完成,并且设置将继续存在?

我想做的只是接受 2 个命名范围,然后是以下范围 只是用前一个范围的行数来抵消这些范围,所以如果那样的Range2 = Sheets().Range("A1:A10")Range3 = Range2.Offset(Range2.Rows.Count,0),那么 assingment 输入只需要成为Range1 as string, Range2 as string, NumberOfExtraRanges as integer我需要至少两个范围的原因是因为范围 1 之后的每个范围都在不同的选项卡上,并且本质上是第一个选项卡中所有工资信息时间等的原始数据版本,这将是 Range1_EmployeeList

我会在等待回复时玩弄它。

TIA

0 投票
1 回答
61 浏览

excel - 使用 ParamArray 将变量 # 的参数传递给内置函数

我想创建一个 VBA 函数,它结合了几个内置的 Excel 函数,每个函数都可以采用一个或多个不同大小的单元格范围 [编辑:如 SUM、COUNT、STDEV.P、AVERAGE、MIN 等;虽然我更喜欢一种适用于任何可以采用这些不连续范围的公式的方法]。

输入的范围数必须灵活,这些参数将直接输入到工作表中。使用 VBA 的 ParamArray 这应该是最简单的,但我不确定如何将每个单元格范围传递给内置函数。这是我尝试过的一个简单示例:

这适用于单个单元格参数,但不适用于范围。例如,如果单元格A1=1 和A2=2,“=Func1(A1,A2)”返回 3,但=Func1(A1:A2)返回#VALUE!

我想过循环遍历 中的每个范围Ranges(),但是我想不出任何方法可以SUM在循环时一次将参数输入到内置函数中。

ps - 实际上我调用了大约 10 个不同的函数(不仅仅是求和,否则这将是微不足道的),每个函数都有相同的范围集,并且此代码旨在允许每个单元格仅输入一次,而不是输入 10 个函数中的每一个。

0 投票
1 回答
28 浏览

arrays - 由于 BC30491,我的 WriteConcatenated 方法不起作用

如果有一个由参数数组的其他元素串联形成的元素,我想将它们打印到屏幕上。

例如:上述参数数组中第三个索引的“twentycents”是数组第二个索引处的“twenty”和数组中第一个索引处的“cents”的串联。然后数组的第三个元素将被打印到屏幕上。

就我而言,代码没有错误,但是 Visual Basic 的编译器给了我

BC30491:表达式不产生值

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/error-messages/expression-does-not-produce-a-value?f1url=%3FappId%3Droslyn%26k%3Dk (BC30491)(错误文档)

我应该如何纠正这个错误?