我试图选择以下行,但它给了我一个调试错误。我认为因为实际的字符串超过256个字符。没有最后127:127的字符串,有效。我怎么能绕过这个?
'不起作用
Range("488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369,127:127").Select
'工作
Range("488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369").Select
Selection.Copy
Sheets.Add after:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = "test1"
答案 0 :(得分:2)
有更短的方式来表示您的范围,但它们是否是您问题的真正解决方案取决于您可能需要选择的最大区域数。
E.g
Range("A401,A403,A405").EntireRow
使用比
更短的字符串Range("401:401,403:403,405:405")
但如果您需要选择更多行,那么最终也会失败。作为一种解决方法,您可以将两个不同的范围联合起来:
... = Application.Union(Range(...), Range(...))
答案 1 :(得分:1)
您可以像处理的那样在字符串中定义范围,然后遍历每一行并将其添加到所选范围。
Sub RangeSelectionTest()
Dim selectedRange As range
Dim row
Dim rows As String
Dim rowArray() As String
'Define row selection string
rows = "488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369,127:127,150:150"
'Split to an array to loop
rowArray = Split(rows, ",")
' Loop through all rows and add to range
For Each row In rowArray
If selectedRange Is Nothing Then
Set selectedRange = range(row)
Else
Set selectedRange = Union(selectedRange, range(row))
End If
Next
' Select the range
selectedRange.Select
End Sub
实际上,您可以创建一个函数,该函数接收范围字符串并返回范围对象。
Sub SelectMyRange()
Dim rows As String
'Define row selection string
rows = "488:488,456:456,455:455,454:454,453:453,448:448,441:441,440:440,439:439,438:438,437:437,436:436,435:435,421:421,414:414,395:395,392:392,391:391,390:390,389:389,388:388,387:387,386:386,385:385,384:384,383:383,382:382,381:381,380:380,379:379,378:378,369:369,127:127,150:150"
Dim myRange As range
Set myRange = RangeSelection(rows)
myRange.Select
End Sub
Function RangeSelection(rangeString As String) As range
Dim selectedRange As range
Dim row
Dim rowArray() As String
'Split to an array to loop
rowArray = Split(rangeString, ",")
' Loop through all rows and add to range
For Each row In rowArray
If selectedRange Is Nothing Then
Set selectedRange = range(row)
Else
Set selectedRange = Union(selectedRange, range(row))
End If
Next
' Return the range
Set RangeSelection = selectedRange
End Function