我基本上是想做一个输入单元格。我想要的是当我改变C2的值时,它会改变C1的值。但是当我擦除C2时,我希望C1保持该值。
因此,如果我使C2 =“亚当”,C1 =“亚当”,但我改变C2 =“”并且C1仍然是“亚当”。
任何人都可以帮我解决这个问题吗?我一直在网上寻找年龄,找不到任何东西来帮助我找到解决方案。
你可以在Worksheet_Change
活动上做到这一点,
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 3 Then 'C2
If Target.Value <> "" Then
Range("C1").Value = Target.Value
End If
End If
End Sub
公式=C2
或某些变体将无效,因为它无法记住已被删除的值。
我想你可以伪造一个如下的公式,但我绝对不推荐它,特别是与代码结合使用。我只是出于兴趣发布它。
Private Sub Worksheet_Change(ByVal Target As Range)
Static old As String
If Target.Row = 2 And Target.Column = 3 Then 'C2
If Target.Value <> "" Then
Range("C1").Formula = "=IF(N(""""),"""","""")&C2"
old = Target.Value
Else
Range("C1").Formula = "=IF(N(""" & old & """),"""","""")& """ & old & """"
End If
End If
End Sub
这是毫无意义的,因为你仍然需要代码。
我想,代码甚至可以写入公式引用的命名范围/值:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> "" Then
ActiveWorkbook.Names.Add Name:="stored", RefersToR1C1:="=""" & Target.Value & """"
End If
End Sub
我们可以使用事件宏来完成此操作。将以下代码放在工作表代码区域中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C1 As Range, C2 As Range
Set C1 = Range("C1")
Set C2 = Range("C2")
If Intersect(Target, C2) Is Nothing Then Exit Sub
If C2.Value = "" Then Exit Sub
Application.EnableEvents = False
C2.Copy C1
Application.EnableEvents = True
End Sub
因为它是工作表代码,所以很容易安装和自动使用:
如果您有任何疑虑,请先在试用工作表上试用。
如果保存工作簿,宏将与其一起保存。如果您在2003年之后使用的是Excel版本,则必须将文件另存为.xlsm而不是.xlsx
要删除宏:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使其正常工作!