使用 VBA 或公式生成的随机 8 位值,但复制并特殊粘贴在其上以保留值

Random 8 digit Values generating with either VBA or Formula BUT copy and special paste over it to keep the value

我对 Excel VBA 和公式很陌生,但我需要在我创建的表单上有一个包含随机值的单元格,以创建一个唯一的 ID(我知道可能会有重复的数字,但它很小)将它发送给人们填写表格但问题是,如果我使用 RandBetween(00000000,99999999),隐藏和取消隐藏只是继续激活很难的公式如果我要发送此模板供其他人填写,我可以跟踪。那么有什么方法可以让我有公式并且当用户打开 Excel 表单时,它会随机化一个 8 位数字并复制并特殊粘贴覆盖它的值以冻结该值。 (也欢迎其他方式,在此先感谢各位)

我不确定你在这里实际想做什么,但如果你想生成一个随机数并将其值存储在一个单元格中,你可以在 'ThisWorkbook' 中使用此代码 VBA:

Option Explicit

Const MySheetName As String = "Sheet1"      ' Change this to your sheet name

Private Sub Workbook_Open()
    ' Called every time you open the excel document

    Dim myRandNumber As Long
    Randomize
    myRandNumber = CLng(Rnd() * 999999999)    ' CLng converts the floating point number to a long integer

    Dim rowNum As Integer
    Dim colNum As Integer
    rowNum = 3
    colNum = 5

    ThisWorkbook.Sheets(MySheetName).Cells(rowNum, colNum).Value = myRandNumber

End Sub

如果您想确保这个数字是唯一的,这可能是您真正想要做的,您可以将这些值存储在一个单独的隐藏 sheet 中,并在每次要生成时检查这些值一个新号码。

您也可以使用这行代码而不是随机数来为数字添加时间戳:

ThisWorkbook.Sheets(MySheetName).Cells(rowNum, colNum).Value = CDbl(Now() * 100000)

这将根据系统时间每 1 秒创建一个新的唯一编号。

如果我没理解错的话,你想生成一次这个号码。我可以想到几种方法来做到这一点:

  1. 仅当单元格为空时生成数字
  2. 在隐藏中设置标志sheet

在这两种情况下,如果您想再次生成数字,只需清除包含数字的单元格(选项 1)或清除 sheet 中的标志(选项 2)

选项1可以通过替换上面这部分代码来完成:

ThisWorkbook.Sheets(MySheetName).Cells(rowNum, colNum).Value = myRandNumber

有了这个:

With ThisWorkbook.Sheets(MySheetName).Cells(rowNum, colNum)
    If (.Value = "") Then
        .Value = myRandNumber
    End If
End With

希望对您有所帮助