2013-05-28 109 views
0

我在Excel中构建一个模板/表单,供不同人在不同计算机上填写一些信息,然后通过电子邮件发送给我。只评估一次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 

但我不知道怎么我的连击功能集成到代码。我也不是非常确定这是否会在我打开计算机上的模板时保持我的独特价值。

我想,一个方法,将限制我在整个工作表中的迭代也将为我服务。

+2

怎么样复制/粘贴值(意思,那么你删除公式)的细胞评估后? – Jerry

+1

由于随机并不能保证唯一可能'Ctrl +;空格Ctrl +:'服务? – pnuts

+0

这确实可以解决我的问题,但看起来更像是一种解决方法,而不是真正的解决方案。我希望保持这种形式尽可能的友好和干净。不过谢谢你的想法。 – user1259984

回答

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 
+0

非常感谢! – user1259984

+0

不客气!如果它解决了您的问题,请点击小标记将其标记为答案!谢谢! –