使用 VBA 创建一个根据勾选的复选框更改的公式

Using VBA to create a formula that changes based on checkboxes ticked

我正在尝试创建一个函数,如果在用户表单中勾选了多个复选框,那么单元格 A1 中的公式会显示一个带有 Choose 函数的不同公式。

如果所有框都被选中,我想要出现的公式是:

=choose(randbetween(1,4),A3,A4,A5,A6)

如果只选择了某些框,例如如果选中框 1 和 3,则公式为:

=choose(randbetween(1,4),A3,B1,A5,B1)

其中 B1 是对空白单元格的引用。 下一个公式将取决于此单元格的值。

目前我采取的做法是:

   Dim a as range, b as range, c as range, d as range,
   'set cell reference with data in if checkbox is selected, blank cell reference if checkbox not selected
   If checkbox1.value=TRUE then 
   set a = range("A3")
   else
   set a = range("B1")
   end if
   'this is repeated for all checkboxes

接下来我想要它所以A1中的公式是

=choose(randbetween(1,4),a,b,c,d)

其中 a、b、c、d 是我在 IF 函数中确定的范围。这就是我被困的地方。如果我这样做

   [A1]="=choose(randbetween(1,4),a,b,c,d)" 

然后公式不接受值

如果我这样做:

    Dim LValue As String
    LValue = Choose(Application.RandBetween(1, 4), a, b, c, d)
    [A1] = LValue

那么返回的只是值,而不是 A1 中有一个公式。

有什么想法吗?

更新:

感谢您的建议。回复您的答案后灵感迸发,我需要的公式是:

[A1] = "=choose(randbetween(1,4), " & a & "," & b & "," & c & "," & d & ")"

在变量变化的单元格中显示公式。变量也必须是字符串而不是范围。

首先,您需要删除d as range,后的逗号。
然后您需要在粘贴到公式中的文本周围添加双引号。

  [a1].Formula = "=choose(randbetween(1,4)," & Chr(34) & a & Chr(34) & "," & Chr(34) & b & Chr(34) & "," & Chr(34) & c & Chr(34) & "," & Chr(34) & d & Chr(34) & ")"

感谢您的建议。回复您的答案后灵感迸发,我需要的公式是:

    [A1] = "=choose(randbetween(1,4), " & a & "," & b & "," & c & "," & d & ")"

在变量变化的单元格中显示公式。变量也必须是字符串而不是范围。