小编vbA*_*der的帖子

为什么,当通过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
查看次数

为什么excel在这里崩溃?

以下崩溃有什么理由擅长2016年?

Option Explicit
Option Compare Text
Option Base 1

Sub p1()
    Dim t(1), w()
    t(1) = w
    If IsMissing(w) Then DoEvents
    If IsMissing(t(1)) Then DoEvents
End Sub
Run Code Online (Sandbox Code Playgroud)

w是一个外行数组,但传递wismissing(w)是细的,但通过使当它t(1),EXCEL再现地终止非正常...

这是我使用vba设法生成的最短代码,它总是杀死excel应用程序(即不使用外部代码,如createobjectshell).

还有其他这样的例子吗?

干杯

excel vba terminate

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

标签 统计

excel ×2

vba ×2

arrays ×1

excel-vba ×1

function ×1

terminate ×1