【问题标题】:Excel VBA: Keeping formulas written in macro in worksheet, so user can manually change formula in worksheetExcel VBA:在工作表中保留以宏编写的公式,因此用户可以手动更改工作表中的公式
【发布时间】:2014-10-12 23:42:05
【问题描述】:

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

这是我在函数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 而不是 @987654326 @ 一遍又一遍地)?可以说变量是另一个单元格吗?有哪些可能性?

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

谢谢!

【问题讨论】:

  • 我不知道你想做什么。如果用户更改(或尝试更改)公式,您是否希望工作表重新计算?究竟应该发生什么?请举一个非常简单的例子。您似乎有多个问题相互贯穿,这往往会导致该网站上的“坏”(例如,很难回答)问题。如果您有多个问题,请随时提出多个问题。
  • 我为这个混乱的问题道歉,但我正在寻找的是如果你双击它=A1*100,如果我在产生的宏中输入:(Given: x = 2, y = 100) ws.Cells(1,x).value= ws.Cells(1,1).value*y,单元格看起来像这样工作表。如果您更改公式,工作表应重新计算。但是,发生这种情况时,生成工作表的宏不必运行。

标签: excel vba worksheet cell-formatting


【解决方案1】:

如果你输入了:

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

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

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

【讨论】:

  • 如果我这样做了,我是否可以在公式中引用单元格的值,其中我引用的单元格是我之前为其构建公式的单元格而不是值?工作表在什么时候实际计算公式?另外,关于这一点,我可以从单元格中的“值”创建一个图表,这些单元格是由我在单元格中构建的“公式”组成的吗?
  • 是的,您可以引用具有公式的单元格,而不仅仅是一个值。 Excel 跟踪单元格依赖项(在公式功能区 - 公式审核 > 跟踪依赖项或跟踪先例上)。当一个单元格发生变化时,所有的 Dependent 单元格将被重新计算,然后是它们的 Dependents,依此类推。图表也依赖于它们的单元格,因此如果单元格值发生变化,它们会被“重新计算”。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多