Excel VBA:存储另一个工作簿可读的版本代码

时间:2017-03-16 23:17:00

标签: excel vba excel-vba

我们通过电子邮件发送,填写并返回工作簿模板。返回时,我们为工作簿分配一个唯一的编号。当前,唯一编号将附加到工作簿名称。

当工作簿未正确填写时,这是一个问题,我们必须将其发送出去进行更正,并在更改名称的情况下将其收回。

工作簿由VBA处理,数据库根据唯一编号进行更新。如果具有相同编号的工作簿再次出现,则假定它是更新并且记录被替换。

我们的想法是将唯一编号存储在隐藏的工作表中。是否有另一种不需要隐藏工作表的方法 - 例如通过代码读取和写入工作簿中的某些隐藏字段或全局常量的能力?

2 个答案:

答案 0 :(得分:2)

您可以使用WorkBook的名称集合:

Sub StoreName(key As String, val As Variant)
    Dim WB As Workbook
    Set WB = ThisWorkbook
    WB.Names.Add key, "=" & val 'to force val to be interpreted as a named formula
End Sub

Function ReadName(key As String) As Variant
    Dim WB As Workbook
    Set WB = ThisWorkbook
    ReadName = Mid(WB.Names(key), 2)
End Function

测试如下:

Sub test()
    StoreName "bob", "1234"
    Debug.Print ReadName("bob")
End Sub

打印1234

还有其他方法可以存储持久数据。例如,这是一个有趣的blog post

答案 1 :(得分:1)

您可以使用CustomDocumentProperties集合来存储您需要的值,如下所示:

Dim p As DocumentProperty

' Delete any existing property with this name
For Each p In ThisWorkbook.CustomDocumentProperties
    If (p.Name = "uniqueNumber") Then
        p.Delete
        Exit For
    End If
Next p

' Create the property with the required value
ThisWorkbook.CustomDocumentProperties.Add "uniqueNumber", False, msoPropertyTypeString, "42846479"

MsgBox ThisWorkbook.CustomDocumentProperties("uniqueNumber")