【发布时间】:2017-11-23 20:39:56
【问题描述】:
我希望有人能帮我解决这个问题,因为我已经在互联网上爬了一段时间,找不到任何明显的原因为什么我的宏在 Excel 下的行为适用于某些用户(包括我当然)并且不适用于其他一些用户的笔记本电脑。
我的目标:
从 VBA 子例程在一个单元格中写入一个 vlookup 公式。基于该 vlookup,它要么找到某些东西并显示文本 A,要么 vlookup 抛出错误然后显示文本 B。
情况
如果我们从最终用户的角度直接在工作表中编写公式,则公式如下:=IF(NOT(ISERROR(VLOOKUP(C2,DataSet2!$A$2:$A$12,1,0))),"Direct Report","Team member of direct report")
当我们在 PC 上复制/粘贴该公式时,宏在电子表格中直接失败。有用。 当我们运行宏实际上试图将该公式合并到同一个单元格中时,它会失败并抛出错误 400。
下面是尝试在单元格中写入上述公式的 VBA 代码:
formulaString = "=IF(NOT(ISERROR(VLOOKUP(C" & CStr(counter + 2) & systemListSeparator & "DataSet2!$A$2:$A$" & CStr(2 + totalDirectReportsCount) & systemListSeparator & "1" & systemListSeparator & "0)))" & systemListSeparator & """Direct Report""" & systemListSeparator & """Team member of direct report"")"
Selection.Offset(counter, 0).Formula = formulaString
因此,正如您可能已经理解的那样,上述两条语句包含在一个循环中,对于我拥有的每一行,我想在当前选定单元格的第一个单元格中添加该公式。
让我抓狂的是:它在我的 PC 上运行良好,在芬兰同事的 PC 上运行良好,但在芬兰另一位同事的 PC 上运行却不行。我有 Windows 10 和 Office 2016,她也有 Windows 10 和 Office 2016...
所以我真的想知道是否有一些区域设置或 Excel 设置或系统设置可能使 HER Excel 无法将我的“formulaString”解释为对她的笔记本电脑可行。我已确保获取列表分隔符以避免那些通常的区域设置容易陷阱,但是否还有其他我不知道的类似陷阱?
非常感谢您提供的任何提示,以便我在调查中取得进展。 亲切的问候, 尼古拉斯 C.
【问题讨论】:
-
你为什么在那里使用
systemListSeparator?Range.Formula是 always en_US 格式,表示:英文函数名,逗号作为参数分隔符,点作为小数分隔符。只有Range.FormulaLocal是语言环境格式,需要注意系统列表分隔符等。 -
@pnuts 不,我没有尝试“.FormulaLocal”
-
@NicolasC。 - 使用
FormulaLocal,您将获得乌龙球。不要尝试。 -
如果你的
systemListSeparator不是逗号,那么它会有害,因为Range.Formula需要逗号作为参数分隔符。 -
很高兴能为您提供帮助。但这与@Vityata 已经回答的基本相同。
Range.Formula和Range.FormulaR1C1与区域设置无关,因为它始终需要 en_US 区域设置格式的公式。也许@Vityata 可以在他的回答中提到这一点。