的情况很简单,如果我的名字细胞A1
是MY_CELL
然后截断并从细胞A2
PASTE到细胞MY_CELL
,然后MY_CELL
将失去这个名字和命名A1
再次。的Excel/Excel VBA中剪切和复制复位单元名称
但是,这种情况不会发生在我复制和粘贴从A2
到MY_CELL
。
如何防止Excel重置单元格名称CUT AND PASTE?
的情况很简单,如果我的名字细胞A1
是MY_CELL
然后截断并从细胞A2
PASTE到细胞MY_CELL
,然后MY_CELL
将失去这个名字和命名A1
再次。的Excel/Excel VBA中剪切和复制复位单元名称
但是,这种情况不会发生在我复制和粘贴从A2
到MY_CELL
。
如何防止Excel重置单元格名称CUT AND PASTE?
逻辑:使用Worksheet_Change
事件将更改捕获到单元格A1
,并在名称丢失时重新创建该名称。
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DoesRngNameExists As Boolean
Dim sName As String
On Error GoTo Whoa
Application.EnableEvents = False
'~~> You named range
sName = "MY_CELL"
If Not Intersect(Target, Range("A1")) Is Nothing Then
'~~> Check if the Range exists
On Error Resume Next
DoesRngNameExists = Len(Names(sName).Name) <> 0
On Error GoTo 0
'~~> If not then recreate it
If DoesRngNameExists = False Then _
ThisWorkbook.Names.Add Name:=sName, RefersToR1C1:="=Sheet1!R1C1"
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
注:在相关薄片的薄片代码区域中的代码。见下面的截图。
注意:如果您的工作表名称不是'Sheet1',那么您将不得不在此处更改它'ThisWorkbook.Names.Add Name:= sName,RefersToR1C1:=“= Sheet1!R1C1” '或者,您可以改用此代码。 'ThisWorkbook.Names.Add Name:= sName,RefersToR1C1:=“=”&Activesheet.Name&“!R1C1”' – 2013-04-11 15:37:57
感谢您的回答。如果用户要剪切并粘贴整行,如何扩展此答案以在目标范围内包含多个命名单元格? – czchlong 2013-04-11 15:44:46
这里增加范围'如果不相交(目标,范围(“A1”))没有那么' – 2013-04-11 15:45:44
我知道你已经标记它作为'VBA的Excel'所以你开了VBA代码? – 2013-04-11 15:16:02
@SiddharthRout,嗨,我绝对开放给你可以建议的任何代码修复。谢谢 – czchlong 2013-04-11 15:19:18
@pnuts,嗨,我不认为用户会很高兴,如果他们不得不这样做,每次只是剪切和粘贴一些行..感谢您的建议,虽然。 – czchlong 2013-04-11 15:20:24