2013-04-11 115 views
3

的情况很简单,如果我的名字细胞A1MY_CELL然后截断并从细胞A2 PASTE到细胞MY_CELL,然后MY_CELL将失去这个名字和命名A1再次。的Excel/Excel VBA中剪切和复制复位单元名称

但是,这种情况不会发生在我复制和粘贴A2MY_CELL

如何防止Excel重置单元格名称CUT AND PASTE

+0

我知道你已经标记它作为'VBA的Excel'所以你开了VBA代码? – 2013-04-11 15:16:02

+0

@SiddharthRout,嗨,我绝对开放给你可以建议的任何代码修复。谢谢 – czchlong 2013-04-11 15:19:18

+0

@pnuts,嗨,我不认为用户会很高兴,如果他们不得不这样做,每次只是剪切和粘贴一些行..感谢您的建议,虽然。 – czchlong 2013-04-11 15:20:24

回答

2

逻辑:使用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 

:在相关薄片的薄片代码区域中的代码。见下面的截图。

enter image description here

+0

注意:如果您的工作表名称不是'Sheet1',那么您将不得不在此处更改它'ThisWorkbook.Names.Add Name:= sName,RefersToR1C1:=“= Sheet1!R1C1” '或者,您可以改用此代码。 'ThisWorkbook.Names.Add Name:= sName,RefersToR1C1:=“=”&Activesheet.Name&“!R1C1”' – 2013-04-11 15:37:57

+0

感谢您的回答。如果用户要剪切并粘贴整行,如何扩展此答案以在目标范围内包含多个命名单元格? – czchlong 2013-04-11 15:44:46

+0

这里增加范围'如果不相交(目标,范围(“A1”))没有那么' – 2013-04-11 15:45:44