首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以在VBA中使用API或其他方法来接近真正的随机数?

在VBA中,可以使用API或其他方法来接近真正的随机数。

VBA本身提供了一个函数 Rnd() 用于生成随机数,但是它的随机性并不高,容易产生重复的数字序列。为了接近真正的随机数,可以借助于API函数或其他方法来增加随机性。

一种常用的方法是使用API函数 CryptGenRandom,它可以生成加密强度的随机数。以下是一个使用该函数生成随机数的示例代码:

代码语言:txt
复制
Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" (ByRef hProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptGenRandom Lib "advapi32.dll" (ByVal hProv As Long, ByVal dwLen As Long, ByRef pbBuffer As Byte) As Long
Private Declare Function CryptReleaseContext Lib "advapi32.dll" (ByVal hProv As Long, ByVal dwFlags As Long) As Long

Function GetRandomNumber() As Double
    Dim hProv As Long
    Dim randomBytes(7) As Byte
    Dim randomValue As Double
    
    ' 初始化加密服务提供者
    CryptAcquireContext hProv, vbNullString, vbNullString, 1, 0
    
    ' 生成随机数
    CryptGenRandom hProv, 8, randomBytes(0)
    
    ' 释放加密服务提供者
    CryptReleaseContext hProv, 0
    
    ' 将随机字节转换为双精度浮点数
    randomValue = CDbl((randomBytes(0) + randomBytes(1) * 256 + randomBytes(2) * 65536 + randomBytes(3) * 16777216 + randomBytes(4) * 4294967296 + randomBytes(5) * 1099511627776 + randomBytes(6) * 281474976710656 + randomBytes(7) * 72057594037927936) / 72057594037927935#)
    
    GetRandomNumber = randomValue
End Function

以上代码使用了 CryptGenRandom 函数生成8个字节的随机数,并将其转换为双精度浮点数返回。由于 CryptGenRandom 函数生成的是字节类型的随机数,需要进行适当的转换。

需要注意的是,为了使用 CryptGenRandom 函数,需要在代码模块中声明相应的API函数,以及使用适当的参数调用这些函数。此外,这个方法也需要确保系统中有足够的加密服务提供者可用。

在VBA中,除了使用API函数外,还可以使用其他方法来增加随机性,如结合时间戳、系统性能指标等信息来生成随机数。这些方法可以根据具体需求和应用场景进行选择和调整。

对于VBA中使用API或其他方法接近真正的随机数的解答,腾讯云的相关产品和产品介绍链接无法提供。

相关搜索:是否可以使用firebase在云函数中调用其他API?在excel vba消息框中是否可以使用vba语法来强制用户单击“确定”或关闭excel?在VBA中,是否有循环类型、函数或方法来清理HTML文件中节点的每个循环的嵌套?您是否可以使用Nameof或其他技术在代码注释中动态嵌入过程名称?在Excell中-是否可以在不使用VBA的情况下根据其他单元格值填充数据?是否可以使用xdmp: random ()或Marklogic中的其他方法每次生成6位数的唯一随机数是否可以在Excel中创建可选择的单元格或引用而不使用VBA宏?是否可以在VSCode (或其他地方)中显示typescript类型/接口的完整计算类型是否可以使用imagekit.io或任何其他CDN来优化颤动中的图像使用FlexBox (或其他css),是否可以在每行中具有不同数量的相同大小的列(即,而不使用空的div)?如何使用Lambda表达式和Stream API或其他替代方法来解析和过滤JSP或JSTL中的两个列表?是否可以使用通配符在firebase安全规则中引用其他节点中的数据?是否可以在Microsoft Graph API中的riskDetections端点上使用日期筛选器?是否可以在不使用Reader/Writer/State Monad或Monad Transformer的情况下在Haskell中构建Restful API在Pandas中或使用Python中的任何其他库时,有没有更好的方法来实现类似的结果在CATIA V5 VBA中是否有命令或字符串可以返回当前打开的文件的名称?在Excel VBA的InStr函数中可以使用word通配符或正则表达式吗?我们是否可以使用相同的ms graph API以编程方式在Sharepoint、OneDrive和Team中搜索文件或文档在Ruby中是否可以有一个名为`class`的关键字参数或其他保留名称?我是否可以在CSS中的div上裁剪蒙版文本(使用或不使用JS的帮助)?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

最佳编码实践:搞砸代码10种方法

,但正如作者所说,“虽然其中一部分只适用于VBA某种IDE,但大多数都是通用”,希望大家触类旁通,将这些方法实践到自己开发工作。   ...2、goto是一个有效语句,我经常使用它   Goto是一个有效语句,但使用不当会产生难以驾驭代码,而且会隐藏错误和拙劣程序设计,当你不能想出一个更好策略时,不要轻易使用goto语句,当你真正需要一个简单重定向程序流时可以使用它...,每次敲下goto时都问一下自己,是否有其它方法来处理这个重定向?...◆ Access,遇到Null时,Nz()返回一个值,而不是Null。   ◆ 如果你需要处理Null变量,请使用Var数据类型,它是唯一可以存储Null数据类型。...8、我是唯一一个使用应用程序的人,因此我程序嵌入了密码   密码和用户id值永远都不应该嵌入到代码,你可能是唯一被授权使用该应用程序的人,但这并不意味着就可以直接将密码嵌入到程序,相反,不管是谁要使用这个程序

2.1K40

启科QuSaaS真随机数解决方案与Amazon Braket结合实践

2、真随机数和伪随机数 计算,硬件随机数生成器(HRNG)随机数生成器是一种从物理过程而不是通过算法生成随机数设备。...虽然可以使用硬件随机数生成器生成更接近真实随机序列,但伪随机数生成器实际对其生成数字速度和再现性非常重要。...• 第二种方法使用计算算法,可以产生长序列明显随机结果,这些结果实际上完全由一个较短初始值(称为种子值密钥)决定。结果,如果种子值已知,则可以再现整个看似随机序列。...3、量子随机数 现在常用依靠计算机模拟产生随机数,或者从某些经典物理噪声(如热噪声,电噪声等)中提取随机数,实际上并不是正真正随机数,因为从理论上讲,经典物理过程考虑到所有变量情况下是可以被模拟...那么是否存在真正随机数呢,随着量子力学发展,通过量子系统产生随机数已经成为可能。 量子物理过程所产生随机性是完全真随机,比如量子态坍缩过程。考虑处于叠加状态一个量子比特: 。

53120
  • Python 随机(Random)模块不可预测之美

    计算机可以随机数模拟现实世界各种随机概率问题,没有随机生成器编程语言不是“好语言”。 什么是真随机数? 现实世界随机数:比如掷钱币、骰子、转轮、使用电子元件噪音、核裂变等等。...1.2 随机数种子 生成伪随机数时,需要设置随机种子,种子作用就是随机数生成算法里注入一个动态变化量。 比如说使用系统的当前时间做随机种子,随机算法就可以时间变化基础上生成随机性更大随机数。...如在 UNIX 系统,将系统时间、连入WIFI、甚至按下键盘次数都量化为了seed。 参考指标越多,伪随机数就越接近真正随机生成。 2....有关安全性加密用途,可使用 Python secrets 模块。...总结 随机数可以很完美的模拟真实世界里各种概率随机事件。python 随机数生成除了可以使用 random 模块外,还可以使用 numpy 库中所提供方法。

    73030

    暂停延迟Excel VBA运行3种方法

    虽然Excel VBA没有用于暂停代码运行内置功能,但可以使用Application.WaitWindows APISleep函数等方法来引入延迟。...下面是需要使用VBA暂停策略情况: 1.暂停代码运行可以让复杂计算数据操作有时间完成,从而确保结果准确可靠。...2.延迟代码运行使得能够与外部事件(如数据库更新web服务响应)进行协调,从而确保无缝集成和实时数据处理。 3.VBA暂停使得有时间继续操作之前查看信息做出决定。...4.批处理操作之间延迟代码运行可以有效地处理大型数据集对多个对象执行操作,同时控制资源消耗 5.VBA代码引入延迟有助于创建一个更可控操作序列,允许脚本逐步执行或以特定间隔执行,从而增强整个脚本代码逻辑和精确度...如果在VBA代码脚本暂停时需要在Excel工作表输入数据,则应尝试基于循环方法。它可以暂停代码执行,直到Excel重组输入数据,然后继续完成代码。

    3.7K30

    11.反恶意软件扫描接口 (AMSI)

    AMSI支持允许文件和内存流扫描、内容源 URL/IP 信誉检查和其他技术调用结构。 AMSI 还支持会话概念,以便反恶意软件供应商可以关联不同扫描请求。...当脚本准备好提供给脚本引擎时,应用程序可以调用 Windows AMSI API 来请求对内容进行扫描。这样,就可以决定继续执行之前安全地确定脚本是否是恶意。 即使脚本是在运行时生成,也是如此。...脚本(恶意其他)可能会经过多次去混淆。但您最终需要为脚本引擎提供简单、未混淆代码。这就是调用 AMSI API 地方。...Office VBA + AMSI 当然amsi也可以检测vba和Java script 实战使用宏攻击(钓鱼)也是我们常用手法,所以我们要知道amsi对宏文件检测流程 微软文档我们可以看到...通过阅读理解微软文档我们可以知道amsi对宏检测查杀流程: 1.word等等钓鱼文件加载宏 2.VBA宏运行时,运行时会有一个循环缓冲区记录数据和参数调用Win32,COM, VBA等等api情况

    4.3K20

    尝试:Script Lab,快速 O365 开发工具SL01)

    一些较经典评如,摘录并翻译如下: 高级用户是否真正适应HTML,CSS和JavaScript?...为什么不使用类似于PowerApps简单公式语言来构建Microsoft Office系列产品加载项而不是Script Lab? 比VBA好多了 这是VBA超酷替代品,也可以在线使用。...我喜欢它,因为我可以快速测试脚本 快速o365开发工具 这是一个很棒工具。与客户进行快速原型制作成为现实。我很乐意看到这个家庭前景和其他产品。...日前,微软向外展示了一系列员工工作之余开发APP,这些“车库极客”们彰显了微软员工基因创新血液。...最后,我们有一个工具可以轻松尝试 Office JavaScript API,无论是感兴趣 Excel 高级用户还是专业开发人员原型化插件!

    2.1K20

    尝试:Script Lab,快速 O365 开发工具SL01)

    评论区网址如下:https://aka.ms/getscriptlab 一些较经典评如,摘录并翻译如下: 高级用户是否真正适应HTML,CSS和JavaScript?...为什么不使用类似于PowerApps简单公式语言来构建Microsoft Office系列产品加载项而不是Script Lab? 比VBA好多了 这是VBA超酷替代品,也可以在线使用。...我喜欢它,因为我可以快速测试脚本 快速o365开发工具 这是一个很棒工具。与客户进行快速原型制作成为现实。我很乐意看到这个家庭前景和其他产品。...工作之余,有创新想法员工可以公司内部招募成员、组建团队,将其变为现实。日前,微软向外展示了一系列员工工作之余开发APP,这些“车库极客”们彰显了微软员工基因创新血液。...最后,我们有一个工具可以轻松尝试 Office JavaScript API,无论是感兴趣 Excel 高级用户还是专业开发人员原型化插件!

    1.3K50

    当Python遇到Excel后,将开启你认知虫洞

    在上个世界末推出Excel5.0(那时还没有office这个产品套件)就已经支持VBA了,那可是Win32下(一种基于dosshell,并不属于真正操作系统)。...CreateObject函数),然后就可以任意调用VBAAPI了,我比较喜欢这种方式。...也就是说,主要操作界面是Excel,Excel调用访问其他系统。例如,很多年前我做过一个基于Excel报表系统。该系统分别使用Delphi和Excel实现。...也就是通过集成其他方式,一种技术可以直接间接使用另外一种技术全部大部分资源。 6....等),UnityMarvel内置了一种虚拟数据库,可以直接用虚拟数据库开发,发布时,会要求选择使用数据库,例如,选择MySQLSQL Server。

    3.5K31

    以太坊go-ethereum常见问题汇总

    可以Mist Ethereum钱包GUI客户端轻松创建钱包合同。 (7) 是否只能从你下载客户端计算机访问密钥文件? 不是的,建议你将密钥文件导出移动,但要牢记你备份密钥文件存储位置。...执行gas必须由提交执行请求地址提供。 (11)一个合约是否可以调用另外一个合约? 可以,参考合约之间交互。 (12) 交易是否可以脱机签名,然后在其他在线设备上提交?...如果从帐户发送了3个交易,则帐户随机数将是3) (15)以太坊合约可以使用第三方API来收集数据吗? 以太坊合约不能以这种方式从外部信息来源提取数据。...当然,你也可以本地加密数据,然后将其广播到网络。 (17)可以Ethereum网络上存储秘密密码吗? 所有关于以太坊数据都是公开以太坊合同存储秘密密码,而不被所有人看到是不可能。...正在尝试使用代码混淆其他技术来达到此目的。 (18) 以太坊如何对抗矿池集中? 基于以太坊PoW共识算法有两种主要方法来对抗挖掘集中。

    1.2K20

    VBA: 为worksheet 设置密码和解除密码

    文章背景: 在工作,有时候需要给工作表内容设置保护,避免数据被误修改,同时又希望可以通过宏命令,实现数据处理自动化。...此时,我们可以宏命令添加相应代码:程序执行前,解除密码;程序结束后,设置密码。...1 判断工作表是否处于保护状态 ProtectContents是工作表属性,用于判断工作簿某张表是否处于保护状态。...End If 2 保护和解除保护工作表 2.1 保护工作表 VBA可以使用Worksheet对象Protect方法保护工作表。...这样,保护工作表期间,那些锁定单元格得到保护,其他未锁定单元格依然可以编辑。 2.2 解除保护工作表 VBA可以使用Worksheet对象Unprotect方法解除保护工作表。

    2.6K20

    Excel催化剂开源第45波-按原图大小导出图片

    从Excel中导出图片,是一个很常规需求,也有一些久旧不衰界面操作法小技巧从OpenXml文件批量导出,VBA开发,也会使用Chart对象背景图技巧来导出。...总体来说,和真正想要效果还是有差距,特别是这样方式导出图片像素会低。 VSTO开发,有更好方式,此篇给大家一一分享。...原理是使用剪切板将图片复制到内存剪切板,再由剪切板转换为图片,复制过程,我们需要考虑原始图片在Excel上显示是已经缩放过,需要将其放大为原始尺寸再复制。...方法,可以将图片放大,特别是图形Shape类型时,可以按原始图来放大,其他按实际显示大小来放大。...直接大量现成方法简单调用,无需像VBA那般苦苦地挣扎着,调用各种古老方法系统API等来扩展原生VBA对象不足。

    1K30

    用人脑生成等概率随机数,困扰人类30万年问题解决了 | 附“源代码”

    怎么才能把人类随机函数变成真正随机函数,要做就是把概率分布大于10%数挪到概率小于10%数上。 你可以想象成切碎这些长条并重新排列,让它们都一样高: ?...举一个极端例子,假设我们将每个长条都“切割”成无限小块,然后就可以像乐高一样使用这些块来建立任何形状概率分布。...xi,i表示自身不调整部分。 最后我们希望所有随机数概率都是0.1,所以其他数字调整进j比例之和应该满足: ?...但是这28%、20%比例如何获得,最初随机分布表就可以啊。 本来就有28%的人选择7,如果我们获得了一个7,问第二个人,如果也得到一个7,我们就把第一个7强制转换成1。...,你应该能得到一个接近平均从1到10随机数发生器,前提是你得有8500个人。

    68320

    VBA: 隐藏模块中出现编译错误:解决对策

    因为 VBA 版本 6 和更早版本没有用于指针句柄特定数据类型,所以,它使用 Long 数据类型(一种 32 位 4 字节数据类型)来引用指针和句柄。...只有 64 位版本 Microsoft Office 运行 VBA 代码时,才需要修改 VBA 代码。...此外,还必须更新任何包含指针句柄以及 64 位整数用户定义类型 (UDT),使之使用 64 位数据类型,同时,必须验证所有变量赋值是否正确,以防止发生类型不匹配错误。...下面这种方法可以避开VBA工程密码验证。具体步骤如下: (1)新建一个工作簿(xlsm格式)(记为工具文件),工作簿内新建一个模块。将以下代码复制到模块内。...(ByVal pFunc, 6, &H40, OriginProtect) 0 Then '标准api hook过程之二: 判断是否已经hook,看看API第一个字节是否为&H68

    12.9K10

    ExcelVBA与python产生不重复随机数

    =======ExcelVBA===== VBA编程实现不重复随机数输出。VBA随机函数是RND,工作表随机函数是RAND,一字之差,可要记好了。...为了得到不同序列,可以用不同负数,也可以rnd -1后面执行Randomize number。注意,要得到相同序列,两次Randomize后面的number必须相同。...注意:若想得到重复随机数序列,使用具有数值参数 Randomize 之前直接调用具有负参数值 Rnd。使用具有同样 number 值 Randomize 是不会得到重复随机数序列。...===== Python产生一个数值范围内不重复随机数可以使用random模块random.sample函数,其用法如下: >>>import random >>>random.sample...(population,k) 函数从序列集合population返回一个长度为k随机数列表,并且列表随机数元素之间是不重复,如: 【方法一】 >>>a =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

    1.4K30

    解除 Excel 表格文档保护全攻略

    日常工作和学习,我们可能会遇到 Excel 表格被保护无法编辑情况。别担心,今天就为大家分享几种解除 Excel 表格文档保护方法。... Google Sheets ,部分保护功能可能会失效,让你可以直接编辑表格内容。若文档依旧受保护,可以尝试另存为 Google Sheets 格式,之后再导出为 Excel 文件。...三、使用密码破解工具 如果你知道猜测 Excel 文档保护密码,可以使用一些专门工具软件来破解保护密码。这类工具包括 Password Recovery、VBA 脚本等。...请记得将代码“password”替换为实际密码。 五、尝试复制内容 如果保护较弱,可以尝试直接复制受保护表格数据到新 Excel 文件。...通常情况下,数据可以被复制,但公式和格式可能会丢失。 总之,当遇到 Excel 表格被保护无法编辑时,不要慌张,可以尝试以上几种方法来解除文档保护,让你工作更加顺利高效。

    14610

    Java实现根据概率中奖率怎么算

    避免方法:程序添加校验逻辑,确保概率数组总和接近于1。如上述代码if语句所示。 2. 浮点数比较误差 由于浮点数运算存在精度问题,直接使用==进行比较可能会导致意外结果。...随机数生成器使用 如果不正确地初始化使用随机数生成器,可能导致结果可预测性,影响公平性。...为了提高效率,可以考虑以下优化措施: 缓存结果 如果奖项数量有限且概率分布固定,可以预先计算所有可能随机数与奖项映射关系,存储一个数据结构(如哈希表)。...日志记录与审计模块 使用AOP(面向切面编程)其他方式,抽奖服务执行前后记录日志,包括抽奖用户ID、抽奖时间、使用随机数、中奖结果等信息。...六、总结 通过理解概率中奖率计算基本原理,结合Java编程语言,我们可以轻松实现基于概率中奖结果计算。在实践,需要注意概率设置准确性、浮点数比较误差处理以及随机数生成器合理使用

    36610

    VBA变量5年踩坑吐血精华总结

    是的,那么我们用VBA如何实现呢? image.png 我们观察发现:行号是变化,而且是「正向递增加1」规律。 VBA,我们将这种根据需要能够随时变化称为变量。...我们用x代替,那么程序就变为: image.png 我们又知道,变量x变化是依据「单元格B2」内容变化而变化,也就是: image.png [备注] VBA,「=」专业术语是「赋值」 即...但是这样操作,有以下几点缺点: 1)程序写起来特别的长,非常容易出错; 2)代码不易维护,修改难度大; 3)VBA从内存读取变量时间要远低于读取单元格时间; 因此,可以总结使用变量有以下好处(拿小本本记好...但是,大家需要注意给VBA变量取名字 需要注意以下几点: (1)尽量使用有意义名字,且尽量使用英文拼音命名 一方面,变量命名有意义就是大家可以读懂,知道变量表达意义,增强代码可读性。...(2)变量命名有讲究,需要注意以下四点: a.尽量使用有意义名字,且尽量使用英文拼音命名 b.不要使用特殊字符 c.不能和系统保留字(关键字)一致 d.VBA大小写不敏感 image.png

    1.7K00

    Range对象

    Offset 偏移,这个方法是很好用 相当于军训站队时候,教官说第5排第6个差不多意思 Range对象使用这个方法就可以偏移到其他Range Resize...对象浏览器使用简单介绍: 在编辑器里按F2,出来1个新界面,查找框里输入Range,但是这个并不能比较精准定位到,你还得在下面一点类(VBA里类就可以理解是对象)框框里去找,它是按照字母排序了...在这里也可以看到对象方法和属性。 基本上我们平时能怎么操作单元格,Range对象都会有对应方法属性。...不需要啦,这时候你已经有了魔法了,你要拿一个东西时候,你直接弄个魔法,叫它跑过来就行了,你现在只要一步了,直接操作Range对象就行啦,激活这种操作VBA里一般都不需要用,你只要能精准找到对象就可以...Range("A1").Value = "123" 举再多例子也不如自己动手去试试来好,所以这东西还是得自己多去使用,才会真正自己去理解。

    1.5K20

    「数据ETL」从数据民工到数据白领蜕变之旅(七)-将Excel(PowerQuery+VBA)能力嫁接到SSIS

    使用场景 PowerQuery数据处理,有相当多一些功能使用起来非常方便,对应于企业级SSIS,反而缺少了这些灵活性,真正要完全使用SSIS来实现,非常繁琐。...dotNET与VBAExcel对象模型上差别 dotNET脚本,引用Excel对象模型,理论上可以替代VBA脚本,但本轮测试发现,dotNET上Excel对象模型,貌似未能有最全开放给VBA...具体M代码如下,定义了一个参数变量filePath,用于VBA上调用方法来赋值。 因dotNET接口上缺少此方法,只能在VBA上定义好再调用来赋值。...具体实现 整个流程如下所示,测试过程同样发现,当一个Excel进程多次被使用时,会存在报错现象,所以索性牺牲一点点性能,每次循环都将Excel进程给清除,并在一开始时也清除所有Excel进程,保证模板文件和其他数据源没有被打开...使用Application.Run方法来调用模板文件里VBA代码,替换掉PowerQuery里参数filePath值。

    4.6K20

    进击恶意文档之 VBA 进阶之旅

    下面我就以威胁分析员角度来介绍几种技术 VBA stomping VBA Office 文档可以以下面三种形式存在 1、源代码: 宏模块原始源代码被压缩,并存储模块流末尾。...Pcodedmp 精准识别了真正宏代码,忽略了伪造 VBA 通过 VBA stomping 原理可知,真正代码存为了 P-Code,所以 olevba 输出结果反编译形式 VBA 即为真正代码...可以通过 Olevba 判断是否使用VBA stomping,如果是则直接使用 Pcodedmp 获取 P-Code 代码。...2007(x86) 8800 2010(x86) 9700 2013(x86) A300 2016(x86) AF00 VBA 编辑器隐藏宏 可以 VBA 编辑器隐藏真正宏,只需要修改 PROJECT...”替换为“txt” 二、很多诱饵文档喜欢 VBA 启动脚本程序执行 ps 或者从网络上下载一段 shellcode 恶意程序等等,这样非常容易被杀软行为拦截拦住,同时沙箱可以根据进程链和流量判定该

    4.6K30
    领券