You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBA循环中使用IIf函数出现#NAME?错误的解决方法求助

解决VBA设置公式时出现匈牙利语#NAME?错误的问题

这个问题的根源其实有两个关键点,咱们一步步拆解:

1. 混淆了VBA函数和Excel工作表函数

你在公式里用了IIf,但这是VBA专属的函数,Excel工作表的条件判断函数是IF(对应匈牙利语版本里的HA)。这就是为什么单元格会报#NAME?——工作表根本不认识IIf这个函数名,而你手动按回车时,Excel可能自动帮你纠正成了正确的工作表函数。

2. 本地化的公式格式差异

匈牙利语版本的Excel有两个和英文版本不同的规则:

  • 工作表函数名是本地化的(比如IF对应HA
  • 参数分隔符用分号;,而不是英文版本的逗号,

对应的解决方案

根据你的需求,有两种稳妥的写法:

方案一:兼容多语言的通用写法(推荐)

使用VBA的Formula属性,它支持用英文函数名和逗号分隔参数,Excel会自动根据当前语言版本转换成对应的本地格式:

Worksheets("Teszt_dec").Cells(i, j + oszlop_number + 5).Formula = _
    "=IF(Teszt!" & Worksheets("Teszt_dec").Cells(i, j + oszlop_number + 5).Address(False, False) & "<$F22,1,0)"

这里把IIf改成了工作表函数IF,其余逻辑保持不变,Excel会自动处理匈牙利语版本的转换。

方案二:针对匈牙利语版本的本地化写法

如果你只需要适配匈牙利语Excel,可以用FormulaLocal属性,直接使用本地函数名和分号分隔参数:

Worksheets("Teszt_dec").Cells(i, j + oszlop_number + 5).FormulaLocal = _
    "=HA(Teszt!" & Worksheets("Teszt_dec").Cells(i, j + oszlop_number + 5).Address(False, False) & "<$F22;1;0)"

这里HA是匈牙利语里的条件判断函数名,参数之间用分号;分隔,完全符合本地Excel的要求,不会出现#NAME?错误。


另外提个小细节:公式里的$F22是混合引用(列绝对,行相对),如果这不是你想要的,可以改成$F$22来实现绝对引用,避免下拉填充时行号变化。

内容的提问来源于stack exchange,提问作者Attila Lazár

火山引擎 最新活动