相关疑难解决方法(0)

如何返回在VBA中传递给它的(Variant)变量的维数

有谁知道如何返回在VBA中传递给它的(Variant)变量的维数?

excel vba variant dimensions

28
推荐指数
5
解决办法
6万
查看次数

为什么,当通过ParamArray将数组元素传递给函数时,varpointer是否会到达函数中?

我注意到在使用ParamArray和传递数组元素时VBA有些奇怪.在某些情况下,它不是数组元素的值到达函数,而是var指针.(Excel 2016,32位).

在经历了一些沉闷之后,我发现函数作为变量数组的定义 - 与参数列表结合使用ParamArray- 似乎是意外行为的起源,但我看不出任何可行的原因,为什么会这样.

在以下情况下,行为恢复正常:
1)在函数声明中删除变量r
2)b声明Dim b()
3)函数返回a Variant,而不是aVariant()

我理解这是一个相当深奥的问题,它似乎可以通过各种方式控制,但是有没有解释这种行为的解释?

Sub Variantarraybug()
   Dim b: b = [{1, 2, 3}]

   Debug.Print farray1(2, b(1))(0)
   Debug.Print Application.WorksheetFunction.Sum(farray1(2, b(1)))
   Debug.Print Join(farray1(2, b(1)), " ")

   Debug.Print farray2(2, b(1))(0)
   Debug.Print Application.WorksheetFunction.Sum(farray2(2, b(1)))
   Debug.Print Join(farray2(2, b(1)), " ")
   Debug.Print  VarPtr(b(1)), VarPtr(b(2))
End Sub

Function farray1(r, ParamArray plop()) As Variant
   farray1 = Array(plop(0), 3)
End Function
Function farray2(r, ParamArray plop()) As Variant()
   farray2 = Array(plop(0), 5) …
Run Code Online (Sandbox Code Playgroud)

arrays excel vba function excel-vba

25
推荐指数
1
解决办法
897
查看次数

VBA数组切片(不是Pythonic意义)

我该如何实现这个功能?

Public Function ArraySlice(arr As Variant, dimension as Long, index as Long) As Variant

    'Implementation here

End Function
Run Code Online (Sandbox Code Playgroud)

假设我想要一个数组切片.我在该维度上指定了一个数组,一个维度和一个索引,我想要切片.

举一个具体的例子,假设我有以下5x4 2D数组

   0  1  2  3  4
  ______________
0| 1  1  2  3  1
1| 3  4  2  1  5
2| 4  5  3  2  6
3| 3  5  2  1  3
Run Code Online (Sandbox Code Playgroud)

如果水平尺寸为1且垂直尺寸为2,则返回值ArraySlice(array, 1, 3)将为1x4 2D阵列.选定的维度2被展平,唯一剩下的值是最初在维度2的索引3处的值:

   0
  ____
0| 3
1| 1
2| 2
3| 1
Run Code Online (Sandbox Code Playgroud)

你会如何在VBA中实现这一点?我能想到的唯一实现将涉及CopyMemory,除非我限制了允许的维度数量并对每种情况进行硬编码.

注意:这是我如何获得数组的尺寸

UPDATE

以下是一些操作示例

对于2D阵列

   0  1  2  3  4
  ______________
0| …
Run Code Online (Sandbox Code Playgroud)

arrays vba

8
推荐指数
1
解决办法
547
查看次数

有没有办法将算术和逻辑运算符作为VBA中的方法参数传递?

跨夫妇的那一个想要通过场景来operators作为parameter一个函数或方法.根据这篇文章,Java没有那种能力,因此需要创建一个Enum主要的解决方法.

例如

Function doCalcs(ByRef AND as LogicalOperator, ByRef greater ArithmeticOperator)
Run Code Online (Sandbox Code Playgroud)

尽管与.Net,Java相比,VBA库的数量要少得多,但创建Enum得到了很好的支持.也许我不知道,所以如果VBA有可能operator types或我们可以通过的任何其他变通方法an operator,那就射入.(除了if else/ case检查包含运算符参数的字符串.. =))我要的是不同于这里提到的.

  • 问题是减少代码,优化.

例如,如果你看CountIFS,它有能力接受operators.即使有人可以解释此功能中可能的后端工作,

  1. 它如何将这些字符串转换为正确的字符串operator
  2. 这是一种Enum结构还是比那更有效或更低效的结构?

这些问题的答案仍然可以接受.

excel enums vba excel-vba logical-operators

6
推荐指数
1
解决办法
4417
查看次数