代码之家  ›  专栏  ›  技术社区  ›  MikeD

excelvba在不同的语言中表现不同

  •  0
  • MikeD  · 技术社区  · 15 年前

    我有一个由名称定义的范围,该范围由一个查询填充。相同的命名区域形成单元格验证的源(在单元格下拉列表中)。在我的VBA中,这个范围是通过一个名为LOVL2的范围对象访问的。

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

    LOVL2.CurrentRegion.Name = LOVL2.Name.Name
    

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

    有人知道是什么原因导致这种情况,只有当微软办公语言设置为法语,而不是英语(“可能有问题”vs“,”在对象内??)

    提前谢谢,麦克


    编辑:2010年8月12日

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

    因此,真正的治疗行动是给一个不同的名称范围,这是接受了法国和英国

    奇怪,但是。。。。。

    1 回复  |  直到 15 年前
        1
  •  0
  •   GSerg    15 年前

    由查询填充

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

    如果是,请尝试以下代码:

    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
    

    试着用一个前导下划线什么的?