Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 仅对excel连接公式求值一次_Vba_Excel_Excel Formula_Excel 2010 - Fatal编程技术网

Vba 仅对excel连接公式求值一次

Vba 仅对excel连接公式求值一次,vba,excel,excel-formula,excel-2010,Vba,Excel,Excel Formula,Excel 2010,我正在用excel创建一个模板/表格,不同的人在不同的计算机上使用该模板/表格填写一些信息,然后通过电子邮件发送给我 当模板被填充时,我需要为一个字段分配一个唯一的ID号以及其他信息(有点像请求ID)。我正在使用生成此唯一ID CONCATENATE("NER-";DEC2HEX(RANDBETWEEN(0;4294967295);8)) 这个公式对我手头的工作很有用 我的挑战是在模板中只对这个公式求值一次,然后在打开文件时保持不变。时间戳上的东西。我已经研究了一些方法,但我似乎无法使其发挥作

我正在用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
但我不知道如何将串联函数集成到代码中。我也不太确定,当我在电脑上打开模板时,这是否会保持我的唯一值不变


我想,一种限制我在整个工作表中的迭代次数的方法也会对我有好处。

当用户第一次打开工作簿/模板时,您可以生成并存储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
Private子工作簿\u Open()
“我已经设置好了吗?
如果表1.范围(“A2”).值为“”,则退出子表
'防止在您的计算机上生成该ID
如果Environ$(“Username”)=“YOURUSERNAME”,则退出Sub
'商店ID
表1.范围(“A2”)。值=_
“NER-”和[DEC2HEX(RANDBETWEEN(04294967295),8)]
端接头

在计算完单元格后,复制/粘贴单元格的值(即删除公式)怎么样?这确实可以解决我的问题,但看起来更像是一种变通方法,而不是真正的解决方案。我希望尽可能保持此表单的用户友好性和干净性。谢谢你的想法。我知道random并不能100%保证唯一性,但正如我所说的,生成这个的公式对于我手头的任务来说是可以的。如果我得到了相同的身份证,我有一种双重检查的方法。这种随机的东西,范围很广,好吧,但它可以不时重复。当您通过单击工作表上的按钮接收电子邮件时,您不能自己生成ID吗?此ID是否需要与您以前收到的所有其他工作表不同?不客气!如果它解决了您的问题,请单击小复选标记将其标记为答案!谢谢