仅评估excel连接公式一次

时间:2013-05-28 12:06:44

标签: excel vba excel-vba excel-formula excel-2010

我正在excel中构建一个模板/表单,不同的人会在不同的计算机上使用它来填写一些信息,然后通过电子邮件发送给我。

当填充模板时,我需要为字段分配唯一的ID号以及其他信息(类似于请求ID)。我正在使用

生成此唯一ID
CONCATENATE("NER-";DEC2HEX(RANDBETWEEN(0;4294967295);8))

这个公式对我有利于手头的任务。

我的挑战是在模板中仅对此公式进行一次评估,然后在我找到文件后打开文件时保持相同。沿着时间戳的线条。我已经研究了一些方法,但我似乎无法让它工作。

我尝试过使用:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    With Target
        If .Count > 1 Then Exit Sub
        If Not Intersect(Range("A2:A10"), .Cells) Is Nothing Then
            Application.EnableEvents = False
            If IsEmpty(.Value) Then
                .Offset(0, 1).ClearContents
            Else
                With .Offset(0, 1)
                    .NumberFormat = "dd mmm yyyy hh:mm:ss"
                    .Value = Now
                End With
            End If
            Application.EnableEvents = True
        End If
    End With
End Sub

但我不知道如何将我的连接函数集成到代码中。当我在计算机上打开模板时,我也不太确定这是否会保持我的独特价值。

我猜想一种限制我在整个工作表中迭代的方法对我来说也很好。

1 个答案:

答案 0 :(得分:1)

您可以在用户首次打开工作簿/模板时生成并存储ID,将此代码放在“ThisWorbook模块中:

Private Sub Workbook_Open()
    'ID already set?
    If Sheet1.Range("A2").Value <> "" Then Exit Sub

    'Prevent that ID is generated on your machine
    If Environ$("Username") = "YOURUSERNAME" Then Exit Sub

    'Store ID
    Sheet1.Range("A2").Value = _
        "NER-" & [DEC2HEX(RANDBETWEEN(0,4294967295),8)]
End Sub