声明单元格或范围作为VBA中的变体

时间:2019-07-29 11:31:29

标签: excel vba cell

这将是一个非常基本的问题。

我想声明单元格为变体,以代替重复键入,例如

var ind = ["Apple", "Pear", "Banana"]; var arr = [ ["Apple", "Banana", "Pear", "Pear", "Apple", "Apple", "Banana"], [11, 12, 34, 54, 76, 23, 232], [33, 54, 22, 11, 23, 21, 33] ]; const first = arr[0]; const result = arr.slice(1).reduce((r, e, i) => { const a = r[i + 1] = []; e.forEach((el, j) => { const index = ind.indexOf(first[j]) if (!a[index]) a[index] = [el]; else a[index].push(el) }) return r; }, [ind]) console.log(result) 要么 a = cells(1,1)

然后 a = range("a1")a.select

发生错误
  

运行时424

我想了解问题所在,该怎么办。

谢谢

1 个答案:

答案 0 :(得分:1)

您已经遇到了VBA的一个有趣的“功能”-默认属性。 Excel库中的大多数对象都有默认属性,该属性在未指定任何属性的情况下使用。对于范围对象,默认属性是Value属性。这意味着该行

    Range("A1") = 4
VBA将

解释为含义

  Let Range("A1").Value = 4

在您的情况下,该行

   a = cells(1,1)

最终被解释为

   Let a = range("a1").value

但是,你写过

   Set a = cells(1,1)

然后设置该值将强制vba将cell(1,1)视为对象,从而将a设置为指向单元格A1的指针,这就是您想要的。

(VBA仍然坚持使用Let进行值分配,因为您的原始行会因歧义而出错,但不会造成混淆-但是Let语句现在是可选的,因此如果您将其保留,则不会出现错误)