我正在尝试在VBA中为MS Project编写一个独立于语言的过滤器。我正在使用语法:
FilterEdit (Name, Taskfilter, Create, Fieldname, Test, Value, Operation...)
我设法让Fieldnames和Tests与语言无关,但我对Operation:=
表达式感到困惑。对于英语语言环境,可以编写:Operation:="and"
但这对其他语言环境不起作用。
有没有办法将逻辑运算符(和/或)编写为枚举? (不是字符串?)
对于Excel,可以编写xlAnd
,而Project有许多以Pj开头的枚举,即。 PjTaskStart
。我也知道有一个Filter.LogicalOperationType
,但我还没弄清楚这是否适合我。我也尝试过FieldConstantToFieldName
,但我认为逻辑运算符没有字段名?
我知道我可以使用If LocaleID = xxxx Then...
,但我不想假设将使用哪种语言环境。
编辑:我解决了问题的第一部分!
将其留空Operation:=""
,Project返回“And”。但我还没想出如何回归“或”......
答案 0 :(得分:0)
Operation:=""
适用于FilterEdit,但不适用于SetAutoFilter。
所以我最终使用了可怕的If LocaleID
。
教学时刻:
我发现大多数运营商可以独立于语言,除了:
And
,Or
,Contains
和Does Not Contain
这些需要为每个地区翻译。
我会在一分钟内找到。首先,我将列出所有与语言无关的运算符:
<
小于<=
小于或等于>
大于>=
大于或等于
=
等于<>
不等于
我找到语言相关运算符所需翻译的技巧是以下MS Office Support页面。
请注意英文支持页面中名为“筛选特定文字”的类别。在这里,我们可以阅读我们需要的所有“单词”。现在转到网页底部并更改语言:
这将打开一个列出所有不同语言的新页面(不是特定于语言环境的)。记住您在英语中找到Contains
单词的位置,然后将语言更改为“Magyar(Magyarorzág)”,我们现在可以在Magyar中看到Contains = "Tartalmazza"
。
下一步是谷歌“马扎尔语言”,并了解这实际上等于匈牙利语。所以现在你可以转到MSDN web page看匈牙利语= LocaleID:1038。
将所有这些放在VBA中使您必须编写以下代码:
Dim LocalContains As String
If LocaleID = 1038 Then
LocalContains = "Tartalmazza" 'Hungarian
ElseIf LocaleID = 1044 Then
LocalContains = "inneholder" 'Norwegian
Else
LocalContains = "contains" 'English
End If