Excel VBA:向单元格添加隐藏信息/属性

时间:2015-12-04 21:42:01

标签: excel vba excel-vba

我编写了一个非常简单的代码,使用按钮将一堆单元格向左或向右移动一个块。问题是我不希望用户能够在同一方向上移动单元格两次。为此,我需要向单元格添加一个隐藏属性,可用于检查它是否已从其初始位置移动,并在文件关闭并重新打开时保存此信息。

这样,在移动之前,为了向左边的单元格示例,我可以检查此属性并查看它是否已经在之前移动过一次,在这种情况下显示错误消息。

如果我可以将此属性设置为等于-1,0或+1,这取决于它是向左移动,居中移动还是向右移动。我知道我可以使用comment属性,但我更喜欢使用隐藏属性。

有干净的方法吗?任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

一种方法是使用定义的命名约定在工作表上创建隐藏的Name来存储移动状态值。

逻辑流程将是:

  • 尝试移动单元格时,请检查该单元格是否存在名称
  • 如果没有,那么之前没有移动过单元格,所以允许移动
  • 如果是,请获取名称值以检查是否允许移动。

  • 如果执行了移动:
  • 如果存在名称alerady,请更新其值
  • 如果没有,请创建并设置值

示例代码片段:

Sub SetHiddenName(r As Range, v As Long)
    Dim nm As Name
    On Error Resume Next
    Set nm = r.Worksheet.Names("__" & r.Address(0, 0))
    On Error GoTo 0
    If nm Is Nothing Then
        Set nm = r.Worksheet.Names.Add(Name:="__" & r.Address(0, 0), _
        RefersTo:=v, _
        Visible:=False)
    Else
        nm.RefersTo = v
    End If
End Sub


Function GetValueOfName(r As Range) As Variant
    Dim nm As Name
    On Error Resume Next
    Set nm = r.Worksheet.Names("__" & r.Address(0, 0))
    On Error GoTo 0
    If nm Is Nothing Then
        ' Return required value for not previously set range
        GetValueOfName = ""
    else
        GetValueOfName = nm.RefersTo
    End If
End Function

答案 1 :(得分:0)

我正在寻找一个可用的(最好是未使用的)单元格属性,可以在其中存储该单元格的值,然后在以后引用它。 “ ID”属性似乎很理想。它是一个String变量,仅在将工作簿保存到网页并希望使用HTML引用此单元格时才使用。否则,将不会使用此属性。

这是该属性说明的链接: https://docs.microsoft.com/en-us/office/vba/api/excel.range.id

例如,以下代码在ID属性中设置一个值: ActiveCell.ID =“ 123456789”