我希望有人能够帮助我解决这个问题,因为我已经在互联网上爬了一段时间,并且找不到任何明显的理由为什么我的宏在Excel下的行为适用于某些用户(当然包括我)并且不适用于其他一些用户'笔记本电脑。
我的目标:
从一个VBA SubRoutine中写入一个单元格中的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
因此,您可能已经理解的上述2个语句包含在循环中,对于我拥有的每一行,我想在当前所选单元格的第一个单元格中添加该公式。
让我发疯的是:它在我的电脑上工作正常,它在我在芬兰的同事的电脑上工作得很好,但在芬兰的另一位同事的电脑上却没有。我有Windows 10和Office 2016,她还拥有Windows 10和Office 2016 ......
所以我真的想知道是否有一些区域设置或Excel设置或系统设置可能使HER Excel不能解释我的" formulaString"适合她的笔记本电脑。我已经确保获取列表分隔符以避免那些通常的区域设置容易陷阱但是会不会有其他类似的陷阱我不知道?
非常感谢我在调查过程中可以遵循的任何提示。 亲切的问候, 尼古拉斯C.
答案 0 :(得分:0)
这真是一个棘手的问题,但幸运的是VBA提供了一个很好的解决方案。
只需在Excel中编写公式,选择单元格并运行以下代码:
Public Sub TestMe()
With ActiveCell
Debug.Print .Formula
Debug.Print .FormulaLocal
Debug.Print .FormulaR1C1
End With
End Sub
在德语版Excel中,您可以获得:
=SUM(C1+D1)
=SUMME(C1+D1)
=SUM(RC[2]+RC[3])
然后仅使用.Formula
或.FormulaR1C1
以及即时窗口中的结果重建公式。因此,来自世界各地的同事会非常高兴。如3个示例中所述,第一个和第三个示例总是按照 en_US格式给出相同的答案。
另一种选择是Excel和VBA不喜欢你的公式,因为芬兰的小数点分隔符与美国的小数点分隔符不同。请参阅How to add hardcoded float number values to the formula using VBA进行更改。
<强>解决方案强> Nicolas C.编辑:以上所有评论和特此答案都帮助我解决了我的问题。非常感谢大家的快速反应和反馈。你真的救了我的一天。因此,根本原因确实是我试图在他/她的语言环境和区域设置上捕获最终用户的系统首选项,并在VBA脚本中使用他/她的列表分隔符(实际上是;)这是一个糟糕的举动,正如@AxelRichter和@Vityata在VBA脚本中所提到的那样,.Formula需要始终以en_US格式编写,即英文函数名,逗号等。
我现在已经删除了与用户相关的列表分隔符,并将其替换为传统的逗号,它解决了我的问题。