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“无效。
奇怪,但是......答案 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
修改
关于后续行动......最奇怪和有趣的。
尝试使用前导下划线或什么?