0

因此,我出人意料地收到了许多用户对我制作的新工具的错误报告。这些用户都安装了德文版的 Excel。快速浏览后,我发现了问题:

我使用这个公式作为命名函数来获取相邻单元格的颜色(不要问我为什么这很重要,但事情取决于结果):

=GET.CELL(63;OFFSET(INDIRECT("RC";FALSE);0;1))

现在在德语版本中,“RC”仍然存在,但必须更改为“ZS”才能使公式不引发参考错误。

它的编写方式是引用函数所在的单元格。

是否可以以不“硬编码”“RC”的方式重写此公式,以便它可以根据用户的本地化而改变(中文和捷克语也可能相关)?或者是否可以用一些可以检查用户语言版本的 VBA 代码替换命名公式?

如果我不能调整这部分工具,我将不得不采用一个不太吸引人的解决方法(有多个 Y/N 检查而不是分配颜色)。

4

3 回答 3

0

好吧,这实际上可能无法回答我的问题,但它确实解决了我的问题。原来,进入

=GET.CELL(63;Sheet!B1)

在名称管理器中,选择 A1 时提供的结果与

=GET.CELL(63;OFFSET(INDIRECT("RC";FALSE);0;1))

因为无论您在何处插入此函数,它都会从右侧的单元格一中获取单元格颜色编号。

于 2020-03-06T14:35:30.827 回答
-1

这很容易用 UDF 解决

选项1:将您想要颜色的单元格作为参数传递(此单元格可以在任何地方,不限于右侧的下一个单元格)

Function GetColor(r As Range) As Variant
    Application.Volatile
    GetColor = r.Interior.ColorIndex
End Function

选项2:获取包含公式的单元格右侧的下一个单元格的颜色

Function GetColorNextCell() As Variant
    Application.Volatile
    GetColorNextCell = Application.ThisCell.Offset(, 1).Interior.ColorIndex
End Function

也就是说,使用格式作为数据是一个主意。当您仅更改单元格的颜色时,这两个公式(以及您的命名范围版本)都不会更新。它们都要求您强制重新计算更新(更改格式不会触发重新计算)。

我已经将它们设置为 Volitile,因此它们至少会更新所有重新计算,但即便如此,如果您只是更改颜色,它们也不会更新。

你正在用那种颜色代表一些东西。我建议您更改它以使用单元格中的特定值来表示它是什么。您始终可以使用条件格式来根据该值为单元格着色。

于 2020-03-07T06:10:10.543 回答
-1

然后,您可以使用 vba 代码找到用户的 LCID,例如

dim lcode as long
lcode = Application.LanguageSettings.LanguageID(msoLanguageIDUI)

然后,您可以使用简单的 if then else 并使用 ( this ) 将 LCID 连接到适当的字符串。例子:

If lcode = "0407" Then
Cells(5, 5).Formula = "=GET.CELL(63;OFFSET(INDIRECT(""ZS"";FALSE);0;1))"
ElseIf lcode = "1033" Then
Cells(5, 5).Formula = "=GET.CELL(63;OFFSET(INDIRECT(""RC"";FALSE);0;1))"
End If

或者,您也可以定义一个字符串 i 并根据 LCID,您可以根据结果附加 i 适当的值并使用:

Cells(5, 5).Formula = "=GET.CELL(63;OFFSET(INDIRECT(" & i & ";FALSE);0;1))"
于 2020-03-06T14:32:11.117 回答