Excel VBA:保留在工作表中macros写公式,所以用户可以手动更改工作表中的公式

我正在使用macros来生成报告。 我从结构中获取信息,并用公式计算在工作表中填充单元格的各种数字。 这些工作表也是在macros中创build的。 我必须做些什么来确保当用户单击单元格时,用于计算单元格中填充的数字的公式将保留在单元格中? 即用户可以决定在报告后更改单元格的公式。

下面是我如何在函数createTS()创build新的单元格:

 Function createTS(ByRef index As Integer, ByRef wBStruct As wBStruct, ByRef gcBStruct As gcBStruct) As Worksheet '1) set up worksheet Set createTS = ThisWorkbook.Worksheets.Add(, ActiveSheet, 1, xlWorksheet) With createTS ThisWorkbook.VBProject.VBComponents(.CodeName).Name = cnDic(index) .Name = wBStruct.wTumorCellLine & "_" & wBStruct.wTypeBlock(index).projNum & "(" & gcBStruct.typeName & ")" End With '...lots of code... 'this is where I populate the cells in the worksheet' '...lots of code... End Function 

在这个函数里,我很可能会把结构中的信息复制到某些单元格中(这些单元格不包含公式,而是我计算其他单元格的原始数字)换句话说,其他单元格中的公式只会是引用其他单元格,而不是macros中创build的结构)。 问题是,如果我可以让公式留在单元格中,他们只能引用其他单元格? (我最初的信念)

示例单元格可能如下所示:

 createTS.Cells(10,x).Value = createTS.Cells(1,5).Value*100 ' x would be some integer 

我在哪里添加代码以确保^公式保留在cell (10,x)以便用户以后可以根据需要更改公式?

基于我想做什么,有没有更好的方法来做到这一点?

在一个侧面说明,假设我是正确的,只有引用其他单元格的公式,我的假设是否可以包括variables引用非单元格,像一个常量( x = 5.3445435我宁愿使用x比5.3445435一遍又一遍)? 可以说variables是另一个单元格? 有什么可能性?

请注意,在生成报告后,macros将closures。

谢谢!

如果你input:

 ws.Cells(1,x).Formula="=" & ws.Cells(1,1).Address & "*" & y 

你实际上会build立单元格的公式,而不是它的价值。

关于工作表公式中使用的“variables”设置,最简单的方法是在单元格中input值,然后命名范围。 您可以在通常具有单元格地址(位于公式栏旁边)的“名称框”中键入名称,也可以在function区“公式”>“名称pipe理器”下执行此操作。
如果你已经命名为单元格Z99作为x那么你的工作表函数可以引用这个名字(例如=A1*x

将用户input保存在一张表中,公式和业务逻辑保存在另一张表中。 前者是用户可编辑的(即解锁),而第二个是locking的,最好是隐藏的。 我不会使用密码,因为有时用户最好知道他想要什么 – 从现在开始2年后,您可能会在不同的公司工作,有人可能想要更改您的公式。 将表单“隐藏”而不是隐藏起来不会造成伤害。

如果您绝对必须在同一张表中混合公式和input,请使用locking/解锁的单元格强制用户保持原样。 另一种方法是使用数据validation来确保单元格中的公式与它应该是相同的 – 可能将“正确”公式保存为命名范围并检查。