我正在使用宏来生成报告。我从结构中获取信息,并使用公式计算填充工作表中单元格的各种数字。这些工作表也在宏中创建。我需要做些什么来确保当用户点击单元格时,计算单元格中填充的数字的公式会保留在单元格中?即,用户可以在报告之后决定改变单元格的公式。
以下是我在函数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
一遍又一遍)?可以说变量是另一个细胞吗?有什么可能性?
请注意,宏将在生成报告后关闭。
谢谢!
答案 0 :(得分:2)
如果您输入:
ws.Cells(1,x).Formula="=" & ws.Cells(1,1).Address & "*" & y
您实际上会为单元格建立公式,而不是它的值。
关于在工作表公式中使用的“变量”设置,最简单的方法是在单元格中输入值,然后命名范围。您可以在“名称框”中键入通常具有单元格地址(在公式栏旁边)的名称,或者在功能区公式>下执行此操作。名称经理。
如果您将单元格Z99
命名为x
,那么您的工作表函数只能按名称引用它(例如=A1*x
)
答案 1 :(得分:0)
将用户输入保存在一个工作表中,将公式和业务逻辑保存在不同的工作表中。前者是用户可编辑的(即解锁的),而第二个是锁定的并且最好是隐藏的。我不会使用密码,因为有时候用户最了解他想要的东西 - 从现在起2年后,你可能在另一家公司工作,有人可能想要改变你的公式。这张纸很难受到伤害"非常隐藏"而不仅仅是隐藏。
如果绝对必须在同一张表中混合公式和输入,请使用锁定/未锁定单元格强制用户保持原样。另一种方法是使用数据验证来确保单元格中的公式与预期的相同 - 也许可以保存"正确的"公式作为命名范围并检查它。