如何在UFT中确保Excel关联公式单元格值一致且固定?
解决UFT读取Excel时RANDBETWEEN引用值不一致的问题
这个问题我之前帮不少同行处理过,核心原因是:UFT通过COM自动化接口启动的Excel实例,是独立于你手动打开的交互端Excel的——你在手动Excel里设置的计算选项,根本不会被UFT启动的后台实例继承,所以才会出现设置了手动计算但没用的情况。
下面给你几个靠谱的解决方案,按优先级和易用性排序:
方案1:在UFT代码里强制锁定计算模式
这是最直接的解决办法,在创建Excel对象的第一时间就把计算模式设为手动,从根源上阻止自动重计算。示例VBScript代码如下:
Dim objExcel, objWorkbook Set objExcel = CreateObject("Excel.Application") ' 直接设置计算模式为手动(xlManual的常量值是-4135,用数值避免常量依赖问题) objExcel.Calculation = -4135 Set objWorkbook = objExcel.Workbooks.Open("你的Excel文件完整路径.xlsx") ' 现在读取A1和A2的值,肯定是一致的 Dim valA1, valA2 valA1 = objWorkbook.Sheets("Sheet1").Range("A1").Value valA2 = objWorkbook.Sheets("Sheet1").Range("A2").Value ' 如果后续需要主动触发计算,再手动调用这句: ' objExcel.Calculate ' 收尾工作 objWorkbook.Close SaveChanges=False Set objWorkbook = Nothing objExcel.Quit Set objExcel = Nothing
小提示:不要用
xlManual这个常量名,直接用数值-4135更稳妥——UFT有时候会找不到Excel内置常量的定义,导致代码报错。
方案2:用Excel宏固化A2的值
如果不想修改UFT代码,可以在Excel文件里加个打开事件宏,让A2在文件打开时就固定为A1的当前值,变成静态数值:
- 手动打开你的Excel文件,按
Alt+F11打开VBA编辑器 - 在左侧的工程窗口里找到你的工作簿,双击打开
ThisWorkbook模块 - 粘贴以下代码:
Private Sub Workbook_Open() ' 把A2的值设置为当前A1的数值,彻底转为静态值 ThisWorkbook.Sheets("Sheet1").Range("A2").Value = ThisWorkbook.Sheets("Sheet1").Range("A1").Value End Sub
- 把文件另存为启用宏的工作簿(.xlsm格式)
这样不管是手动打开还是UFT打开,A2都会在启动时固定为A1的随机值,之后再也不会变动,读取时肯定和A1一致。
方案3:提前固化A1的随机值
如果你的测试数据不需要每次打开都生成新的随机数,只是偶尔需要更新,那最简单的办法就是手动生成一次随机值后,把A1的公式转为静态数值:
- 选中A1单元格,按
F2进入编辑模式,再按F9,公式就会直接变成当前的随机数,然后保存文件。这样A1和A2都是静态值,UFT读取时永远不会出现不一致的情况。
补充说明:为什么手动设置Excel选项无效?
再次强调:UFT启动的是一个后台的、无界面的Excel实例,它的配置是全新的,和你手动打开的带界面的Excel完全是两个独立的进程。你在手动Excel里设置的“手动计算”“保存前不重新计算”这些选项,只会对当前的交互实例生效,不会被UFT的后台实例继承,所以必须通过代码或者Excel宏来解决。
内容的提问来源于stack exchange,提问作者bugfinder
相关产品推荐
相关产品推荐

