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

时间:2014-08-19 18:44:56

标签: excel vba worksheet cell-formatting

我正在使用宏来生成报告。我从结构中获取信息,并使用公式计算填充工作表中单元格的各种数字。这些工作表也在宏中创建。我需要做些什么来确保当用户点击单元格时,计算单元格中填充的数字的公式会保留在单元格中?即,用户可以在报告之后决定改变单元格的公式。

以下是我在函数createTS()中创建新单元格的方法:

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 

在函数中,我可能会将结构中的信息复制到某些单元格中(这些单元格不包含公式,但是是我从中计算其他单元格中的值的原始数字。换句话说,其他单元格中的公式只会引用其他单元格,而不是宏中创建的结构。关键是如果我能让公式留在细胞中,它们只能参考其他细胞? (我最初的信念)

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

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

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

根据我想做的事情,有更好的方法吗?

在旁注中,假设我在假设中只使用公式引用其他单元格是正确的,公式是否包含完全引用非单元格的变量,如常量(x = 5.3445435我宁愿使用x而不是5.3445435一遍又一遍)?可以说变量是另一个细胞吗?有什么可能性?

请注意,宏将在生成报告后关闭。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您输入:

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

您实际上会为单元格建立公式,而不是它的值。

关于在工作表公式中使用的“变量”设置,最简单的方法是在单元格中输入值,然后命名范围。您可以在“名称框”中键入通常具有单元格地址(在公式栏旁边)的名称,或者在功能区公式>下执行此操作。名称经理。
如果您将单元格Z99命名为x,那么您的工作表函数只能按名称引用它(例如=A1*x

答案 1 :(得分:0)

将用户输入保存在一个工作表中,将公式和业务逻辑保存在不同的工作表中。前者是用户可编辑的(即解锁的),而第二个是锁定的并且最好是隐藏的。我不会使用密码,因为有时候用户最了解他想要的东西 - 从现在起2年后,你可能在另一家公司工作,有人可能想要改变你的公式。这张纸很难受到伤害"非常隐藏"而不仅仅是隐藏。

如果绝对必须在同一张表中混合公式和输入,请使用锁定/未锁定单元格强制用户保持原样。另一种方法是使用数据验证来确保单元格中的公式与预期的相同 - 也许可以保存"正确的"公式作为命名范围并检查它。