#vba #excel #excel-formula
#vba #excel #excel-формула
Вопрос:
я попытался выбрать следующие строки, но это выдает ошибку отладки. я думаю, потому что фактическая строка превышает 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"
Ответ №1:
Существуют более короткие способы представления вашего диапазона, но являются ли они реальными решениями вашей проблемы, зависит от максимального количества областей, которые вам когда-либо понадобится выбрать.
Например
Range("A401,A403,A405").EntireRow
использует строку с более коротким диапазоном, чем
Range("401:401,403:403,405:405")
но если вам нужно выбрать еще много строк, то в конечном итоге это также приведет к сбою. В качестве обходного пути вы можете объединить два отдельных диапазона:
... = Application.Union(Range(...), Range(...))
Ответ №2:
Вы можете определить диапазон в строке, как вы это делали, а затем перебирать каждую строку и добавлять ее в выбранный диапазон.
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