【发布时间】:2019-02-22 14:43:22
【问题描述】:
我正在为我的同事设计一份时间报告。有些单元格包含(隐藏的)公式但未受保护,因为我需要用户仍然能够手动覆盖公式。
现在,如果用户输入他/她自己的内容然后再次删除它,单元格是空的,这是我不想要的,因为它只会导致混乱。
我想编写一个 VBA 宏,它可以识别先前声明的范围内的单元格内容是否被删除/为空,如果它们被删除/为空,则应将另一个(受密码保护和隐藏)单元格中的公式复制到空单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRange As Range
Set myRange = Intersect(Range("F9:I108"), Target)
If Not myRange Is Nothing Then
'I'm guessing something with WorksheetFunction and possibly CountA,
'but I don't know how to make it work
End If
End Sub
如果一个单元格(或多个单元格)的内容被删除,应该输入的公式总是在第 117 行(同一个工作表)。例如,如果用户删除了 G50,那么 G117 的公式应该被复制到 G50 中,就像您通常在 Excel 中复制公式一样(所以如果 G117 中有指向 A117 的非 $-reference,那么它应该指向 A50将公式复制到 G50 后)。
如果可能,我希望不使用循环——它们总是需要很长时间才能执行。
提前致谢!
【问题讨论】:
-
您是否可以只设置一个用户覆盖列,然后默认使用该值覆盖您计算的、受保护的列?类似于:
=IF(Sheet!UserColumn1="",Sheet!CalculatedColumn1,Sheet!UserColumn1)