0

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

这是我在函数中创建新单元格的方法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一遍又一遍地使用)?可以说变量是另一个单元格吗?有哪些可能性?

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

谢谢!

4

2 回答 2

2

如果您输入:

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

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

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

于 2014-08-19T19:49:28.483 回答
0

将用户输入保存在一张表中,将公式和业务逻辑保存在另一张表中。前者是用户可编辑的(即解锁),而第二个是锁定的,最好是隐藏的。我不会使用密码,因为有时用户最清楚他想要什么——从现在起 2 年后,您可能在另一家公司工作,并且有人可能想要更改您的公式。使工作表“非常隐藏”而不是仅仅隐藏不会有什么坏处。

如果您绝对必须在同一张表中混合公式和输入,请使用锁定/解锁的单元格来强制用户保持原样。另一种选择是使用数据验证来确保单元格中的公式与应有的相同——也许将“正确”的公式保存为命名范围并对其进行检查。

于 2014-08-19T19:53:05.137 回答