我目前正在双击更改一个单元格值以完成(在范围内) 但是我希望以后可以随时双击该单元格并恢复为原始公式。当前,这只是将单元格替换为“ DONE”。我需要它来检查列C5的状态并替换原始公式。我将公式保存在每个单元格的另一列(S5)。
我到目前为止有什么 我也意识到我不需要多列D:仅D列就不需要G
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列中的单元格时,我想在“ Done”和S中的公式之间交换 大约有400行。
很抱歉,我正在尝试编辑评论而不是原始帖子。感谢您的帮助。
您编写的代码可以工作,但是D列中的值返回为=(WORKDAY(xer5,1,$ BJ $ 2:$ BJ $ 58))
答案 0 :(得分:1)
检查目标的当前值,如果该单元格已经包含 Done ,则还原为原始公式。
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
您只能双击一个单元格;不需要检查多个单元格为Target。
除非您将所有内容都设为绝对引用,否则xlR1C1样式公式对于列中的任何行都不会更改。我发现您不太可能输入396个绝对参考公式,因此S列中的任何公式都应适合D5:G400中的任何单元格。
答案 1 :(得分:0)
我对您的问题的措辞有点困惑,但这是我对它的理解:
我的方法是简单地保留一个辅助工作表并在其中存储值,如下所示:
Private Sub Worksheet_BeforeDoubleClick( _ ByVal Target As Range, Cancel As Boolean)
Dim rInt As Range, rCell As Range
Set rInt = Intersect(Target, Range("D5:G400"))
Dim backup As Excel.Worksheet
Set backup = Worksheets("backup") ' be sure to create this worksheet beforehand
If Not rInt Is Nothing Then
For Each rCell In rInt
If rCell.Text = "Done" Then
rCell.Value = backup.Range(rCell)
Else
backup.Range(rCell).Value = rCell.Value
rCell.Value = "Done"
End If
Next
End If
Set rInt = Nothing
Set rCell = Nothing
Cancel = True
End Sub
我实际上还没有测试过这段代码,并且我对Range对象有点粗略(我经常不使用VBA来处理excel,通常只使用字符串),所以您可能需要对其进行适当的编辑,但希望它能为您指明正确的方向。
我应该注意,您需要先使用我的代码在excel中创建额外的工作表。