带格式单元格执行VBA UDF函数PREREQUISITESOK出现#VALUE!错误
问题根因分析
- 核心触发原因是代码中使用
Range.Text属性读取单元格内容。当单元格存在行内富文本格式(同单元格内部分文本有独立的字体、颜色、粗细等格式)时,Excel VBA的Text属性在读取这类单元格内容时会抛出未捕获的运行时错误,自定义函数触发运行时错误时默认返回#VALUE!。清除单元格格式后,单元格变为普通文本格式,Text属性可以正常读取,错误消失。 - 额外隐藏问题:代码中未声明
training_id变量,如果VBA工程开启了Option Explicit强制变量声明规则,会直接触发「变量未定义」运行时错误,同样会返回#VALUE!。
修复方案
- 将代码中所有读取单元格文本的
.Text替换为.Value2,.Value2读取的是单元格的原始存储值,不受任何显示格式、行内富文本格式影响,不会触发相关错误:
' 替换前 prerequisite_cell_txt = prerequisite_cell.Text training_id_cell_txt = training_id_cell.Text ' 替换后 prerequisite_cell_txt = prerequisite_cell.Value2 training_id_cell_txt = training_id_cell.Value2
- 补充
training_id变量的声明,避免变量未定义错误:
' 在变量声明区域新增 Dim training_id As Range
内容的提问来源于stack exchange,提问作者John Snow
相关产品推荐
相关产品推荐

