excel - VBA 还原单元格
问题描述
我目前正在双击以将单元格值更改为完成(在范围内)但我希望能够在以后随时双击该单元格并恢复为原始公式。目前这只是用 "DONE" 替换单元格。我需要它来检查 C5 列的状态并替换原始公式。我将公式保存在每个单元格的另一列( S5 )。
到目前为止,我还意识到我不需要它用于多列 D:G 不需要只是 D 列
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rInt As Range
Dim rCell As Range
Set rInt = Intersect(Target, Range("D5:G400"))
If Not rInt Is Nothing Then
For Each rCell In rInt
rCell.Value = "Done"
Next
End If
Set rInt = Nothing
Set rCell = Nothing
Cancel = True
End Sub
每行都有对应的日期 C 列有一个开始日期 01/06/2018
D 列 =(WORKDAY(C5,1,$BJ$2:$BJ$58)) S 列有 D 的存储公式 =(WORKDAY(C5, 1,$BJ$2:$BJ$58))
当我双击 D 列中的一个单元格时,我想在“完成”和 S 中的公式之间交换大约 400 行。
对不起,多帖子,我试图编辑评论而不是原始帖子。感谢您的帮助。
您编写的代码有点工作,但 D 列中的值返回为 =(WORKDAY(xer5,1,$BJ$2:$BJ$58))
解决方案
如果单元格已包含Done,请检查 Target 的当前值并恢复为原始公式。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If not Intersect(Target, Range("D5:G400")) is nothing then
cancel = true
select case lcase(target.value)
case "done"
target.formular1c1 = range("S5").formular1c1
'option for formula from corresponding row in column S
'target.formular1c1 = cells(target.row, "S").formular1c1
case else
'next line to go with option above
'cells(target.row, "S").formular1c1 = target.formular1c1
target = "Done"
end select
end if
End Sub
您只能双击单个单元格;检查多个单元格作为目标是不必要的。
xlR1C1 样式公式不会更改列下的任何行,除非您已将所有内容设为绝对参考。我发现您不太可能输入 396 个绝对参考公式,因此 S 列中的任何公式都应该适用于 D5:G400 中的任何单元格。
推荐阅读
- php - laravel 的背包 - 更新行时出错
- unit-testing - 如何在扩展 yii2 中运行 php 单元测试
- android - JSON 对象上的空对象引用
- sql - 提取第 n 个子串
- uri - URI 是否总是有主机部分
- json - 该功能未重定向到正确的屏幕
- spring - 如何使用 Spring 5 WebClient 进行头部调用
- java - Java TreeSet 使用的内存是否比 PriorityQueue 少?
- multithreading - 如果 beanshell 后处理器内部的条件不起作用 Jmeter
- graphql - 在 GraphQL 中对类型和输入使用相同的字段