我想寻求帮助,因为我相信这个问题需要 VB。我基本上有一个 CELL(A4),人们将在其中输入值以找出下面显示的相应计算。
不过我想添加一个附加功能,将常用值自动输入到同一个单元格(A4)中。
单元格 E7 和 E8 将接收输入并将其乘以 960(E7)或 765(E8)并将该值传输到单元格(A4),以便其余公式正确更新。
基本上让用户直接在 A4 中输入袋子数量或在 E7 或 E8 中输入容器数量。
**这就是我遇到的问题,因为当我在 A4 上输入公式时,只要直接在 A4 上输入值,它就会被删除。
**还请注意,E7 和 E8 的结果应该显示(在 A4 中),因为我也需要它。
我的表单:
答案1
您可以使用 VBA 中的工作表更改函数。例如
Private Sub Worksheet_Change(ByVal target As Range)
If Intersect(target, Range("e7:e8")) Is Nothing Then Exit sub
Application.enableevents = False
ActiveSheet.range("A4").formula="=if(e7="""",e8*765,e7*960)"
Application.enableevents = True
End Sub
每当工作表发生变化时,它都会检查更改的单元格是否为 e7 或 e8。如果是,它会将公式
=if(e7="",e8*765,e7*960)
在单元格 A4 中。如果您随后在单元格 A4 中输入一个值,它将保留,直到您再次更改 e7 或 e8。您可能需要进行调整才能让它完全按照您的意愿执行,但这个想法就在那里。
这将进入 vba 中 Microsoft Excel 对象下的工作表对象。
编辑:
为了符合评论。
新代码,仅当单元格中添加或更改值时才会执行某些操作,如果删除值则不会运行。
然后检查 e7 是否被编辑。如果是,则删除 e8。如果没有,我们知道 e8 已被编辑,因此删除 e7。公式保持不变。
Private Sub Worksheet_Change(ByVal target As Range)
If Intersect(target, Range("e7:e8")) Is Nothing Or target.Value = "" Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Range("A4").Formula = "=if(e7="""",e8*765,e7*960)"
If Intersect(target, Range("e7")) Is Nothing Then
ActiveSheet.Range("e7").ClearContents
Else
ActiveSheet.Range("e8").ClearContents
End If
Application.EnableEvents = True
End Sub
答案2
在商业中,我们通常希望使用公式来计算某个值,但仍然允许用户覆盖该公式特别案例。
说A4代表总成本并包含:
=D8*G8
在哪里D8是单位成本,G8是数量。
但对于特殊客户,我们希望能够报出折扣价。我们将折扣价计入H8并修改公式如下:
=IF(H8<>"",H8,F8*G8)
所以如果我们想要覆盖,它就会进入H8;否则我们离开H8空白的。
答案3
您可以使用 VB 在计算阶段更改任何值。
但这样做意味着宏将改变 A4 中的值,并且您必须添加一些内容才能知道该值不应在第二次更新。
因此从理论上讲这是可能的,但这样做是非常不切实际的。
如果您只是想要一个包含常用值的下拉列表,则无需使用 VB。Excel 内置了此功能。您可以通过 来实现data validation
。
答案4
我使用的解决方案是,您只有几个单元格,我希望既能进行计算,又能输入值来覆盖公式或删除输入的内容并让公式起作用。
根据需要设置您的工作表..然后对于您想要覆盖的单元格,在屏幕外的列中设置一个相同的单元格,即列 az,然后在那里剪切并粘贴您的 ell 在此特殊输入中,更改您的公式,但使用 if 来测试是否已在原始单元格中输入值。
然后复制此单元格,选择原始单元格并特殊粘贴链接的图片。
现在选择图片并向其正下方的单元格添加超链接,如果您认为它可能会因插入行而移动,请使用行名称。
现在您应该发现该单元格看起来像是正在显示公式中的值,当您单击该单元格时,超链接会跳转到下面的单元格,输入值后显示会发生变化,删除它后会显示公式值。
还可以考虑在公式单元格上添加一个条件格式,如果显示的单元格中有值,该格式就会改变,这有助于提醒您已输入了手动值。
希望这有助于设置看起来简单且无需宏即可执行的表单。
特里