Excel 命名范围字符限制的解决方法

Excel 命名范围字符限制的解决方法,excel,vba,Excel,Vba,我正在构建一个图形,其中序列被命名为范围。这一切都很好,因为我有一个dropbox,在这里我选择了客户,它在数据中循环,为命名范围创建字符串并编辑它,刷新图表,瞧 现在,问题是这个字符串的长度限制为255个字符,如果客户有很多记录,那么它就会出错 有没有人遇到过类似的问题或知道解决方法 For i = 8 To lRow If Sheets("Data").Cells(i, 4).Value = cmbInst.Value Then nRangeTrade = nRang

我正在构建一个图形,其中序列被命名为范围。这一切都很好,因为我有一个dropbox,在这里我选择了客户,它在数据中循环,为命名范围创建字符串并编辑它,刷新图表,瞧

现在,问题是这个字符串的长度限制为255个字符,如果客户有很多记录,那么它就会出错

有没有人遇到过类似的问题或知道解决方法

For i = 8 To lRow
    If Sheets("Data").Cells(i, 4).Value = cmbInst.Value Then
        nRangeTrade = nRangeTrade & "Data!$A$" & i & ","
        nRangeSettle = nRangeSettle & "Data!$C$" & i & ","
    End If
Next
nRangeTrade的值

数据$A 85美元,数据$A 97美元,数据$98美元,数据$156美元,数据$A 157美元,数据$308美元,数据$309美元,数据$464美元,数据$473美元,数据$474美元,数据$478美元,数据$490美元,数据$541美元,数据$546美元,数据$A$633,Da“


如您所见,这就是问题的症结所在。

命名范围可以引用其他命名范围,因此您可以在几个名称块中构建它,然后使用主名称引用子块

命名范围可以引用其他命名范围,因此您可以在几个名称块中构建它,然后使用主名称引用子块像这样的怎么样

Sub test()
Dim nRangeTrade As Range, nRangeSettle As Range
lrow = 1000
For i = 8 To lrow
    If Sheets("Data").Cells(i, 4).Value = cmbInst.Value Then

        If nRangeTrade Is Nothing Then
            Set nRangeTrade = Sheets("Data").Range("A" & i)
        Else
            Set nRangeTrade = Application.Union(nRangeTrade, Sheets("Data").Range("A" & i))
        End If

        If nRangeSettle Is Nothing Then
            Set nRangeSettle = Sheets("Data").Range("C" & i)
        Else
            Set nRangeSettle = Application.Union(nRangeSettle, Sheets("Data").Range("C" & i))
        End If
    End If
Next i
'nRangeTrade.Select
Sheets("Data").Names.Add Name:="nRangeTrade", RefersTo:=nRangeTrade
Sheets("Data").Names.Add Name:="nRangeSettle", RefersTo:=nRangeSettle
End Sub

像这样的怎么样

Sub test()
Dim nRangeTrade As Range, nRangeSettle As Range
lrow = 1000
For i = 8 To lrow
    If Sheets("Data").Cells(i, 4).Value = cmbInst.Value Then

        If nRangeTrade Is Nothing Then
            Set nRangeTrade = Sheets("Data").Range("A" & i)
        Else
            Set nRangeTrade = Application.Union(nRangeTrade, Sheets("Data").Range("A" & i))
        End If

        If nRangeSettle Is Nothing Then
            Set nRangeSettle = Sheets("Data").Range("C" & i)
        Else
            Set nRangeSettle = Application.Union(nRangeSettle, Sheets("Data").Range("C" & i))
        End If
    End If
Next i
'nRangeTrade.Select
Sheets("Data").Names.Add Name:="nRangeTrade", RefersTo:=nRangeTrade
Sheets("Data").Names.Add Name:="nRangeSettle", RefersTo:=nRangeSettle
End Sub

使用字符串连接构建范围只会带来痛苦和痛苦!请改用
Range
类型的变量。这就是
Range
的作用。请参阅@osknows'答案以获取示例。使用字符串连接构建范围只会带来痛苦和痛苦!改用
Range
类型的变量。这就是
 范围
用于。有关示例,请参见@osknows'答案。