Excel VBA在不同语言中的行为不同

时间:2010-07-15 09:58:42

标签: excel vba

Win-XP,Excel 2003

我有一个由名称定义的范围,由查询填充。相同的命名范围构成了单元格验证的来源(单元格下拉列表)。在我的VBA中,可以通过名为LOVL2的范围对象访问此范围。

每次查询重新填充范围时,都会重新定义其名称以包含通过查询获得的所有行。这是通过声明

完成的
LOVL2.CurrentRegion.Name = LOVL2.Name.Name

只要MS Office语言设置为英语,语句就可以正常工作,但当MS office语言设置为法语时语句失败....我收到错误1004“无效名称”

任何人只有在MS Office语言设置为FRENCH但没有使用ENGLISH时才知道是什么导致了这种情况? (也许问题与“;”vs“,”在对象中?)

先谢谢MikeD


编辑2010年8月12日

真正的根本原因现在很清楚:

范围的名称是“L2PoP”,它在ENGLISH版本中被识别为范围的有效名称 - 您可以转到任何空白工作表,选择范围并将其命名为“L2PoP”。

将您的用户语言设置为FRENCH,转到任何空白工作表,选择一个范围并将其命名为“L2PoP”,并且您会收到错误消息“Nom non valide”。

所以真正的治疗方法是给法语和英语接受的范围提供不同的名称

我只能推测导致这种情况的原因,它可能与前两个字符看起来像一个单元格地址的事实有关,另一方面“A1PoP”是有效名称,而“L2Foo”和“ L1Foo“无效。

奇怪,但是......

1 个答案:

答案 0 :(得分:0)

  

由查询

填充

通过查询表?
查询表的结果范围已经有一个名称,该名称是查询表本身的名称(有点已清理)(在属性对话框中设置)。这意味着您无需重新定义任何内容。

如果你这样做,那就试试这段代码:

Sub asfgsdfg()

  Dim n As Name
  Set n = ThisWorkbook.Names("LOVL2")

  'Or in case of a local name,
  'Set n = ThisWorkbook.Worksheets("The worksheet").Names("LOVL2")

  ChangeNamedRangeAddress n, n.RefersToRange.CurrentRegion

End Sub

Public Sub ChangeNamedRangeAddress(ByVal n As Name, ByVal NewRange As Range)
  n.RefersTo = "='" & Replace(n.RefersToRange.Worksheet.Name, "'", "''") & "'!" & NewRange.Address(True, True, xlA1)
End Sub

修改

关于后续行动......最奇怪和有趣的。

尝试使用前导下划线或什么?