如何阅读/使用自定义文档属性?

时间:2019-01-14 10:44:47

标签: excel vba

我目前正在一个项目中,我需要保存一些变量,这些变量可以在工作簿的每次打开时使用,而无需在启动时手动进行设置。

要创建自定义文档属性,我使用Microsoft在其官方网站上提供的示例代码。

问题:
设置属性后,我将通过打开item(x)来访问它们。数字x似乎取决于物业名称的字母顺序。

有没有一种方法可以读取和使用属性,并按其名称打开它?

Sub InitializeCustomProperty()     
    Dim wksSheet1 As Worksheet     
    Set wksSheet1 = Application.ActiveSheet

    ' Add metadata to worksheet.
    wksSheet1.CustomProperties.Add _
      Name:="Computer 1", Value:="computername"
End Sub


Sub Add_My_Computer1()
    ' sets the value of my custom property (i"ve found out its Item(1) by outputting my properties 
    Dim sHostName2 As String
    sHostName2 = Environ$("computername")
    Worksheets(1).CustomProperties.Item(1).Value = sHostName2
End Sub

2 个答案:

答案 0 :(得分:0)

我不知道是否有更简单的方法,但是以下函数通过其名称返回CustomProperty:

Function PropertyByName(PropertyName) As CustomProperty
    Dim x As CustomProperty
    For Each x In Worksheets(1).CustomProperties
        If x.Name = PropertyName Then
            Set PropertyByName = x
            Exit For
        End If
    Next
End Function

您可以阅读。.

?PropertyByName("Computer 1").Value

或者您可以用..

PropertyByName("Computer 1").Value = Environ$("computername")

如果找不到名称,可能会进行一些错误检查,也许可以将工作表作为参数传递,但希望您能理解。

答案 1 :(得分:0)

您可能会考虑从普通视图中隐藏的工作簿或工作表范围的已定义名称。

Sub InitializeCustomNames()
    Dim wksSheet1 As Worksheet

    ' Add defined name to workbook
    ThisWorkbook.Names.Add Name:="wb1USR", _
                           RefersTo:=Chr(61) & Chr(34) & Environ("USERNAME") & Chr(34), _
                           Visible:=False

    ' Add defined name(s) to specific worksheet
    Set wksSheet1 = Worksheets("sheet5")
    wksSheet1.Names.Add Name:="ws1CN", _
                        RefersTo:=Chr(61) & Chr(34) & Environ("COMPUTERNAME") & Chr(34), _
                        Visible:=False
End Sub

Sub retrieveCustonNames()

    Debug.Print Split(ThisWorkbook.Names("wb1USR"), Chr(34))(1)

    Debug.Print Split(ThisWorkbook.Worksheets("sheet5").Names("ws1CN"), Chr(34))(1)

End Sub

在Sheet1中A1:A2中

=ws1CN
=wb1USR

这些将在公式,定义的名称,名称管理器中可见,但是如果您使用 Visible:= True ,则可以显示。