2015-04-24 3 views
0

Я разрабатываю макрос, который позволяет пользователям выбирать определенные диапазоны набора данных, которые они хотели бы проверить на наличие ошибок (в этом случае, если респонденты опроса выбрали одну и ту же опцию для нескольких вопросов). Для того, чтобы сделать его более удобным для пользователей, чтобы увидеть, что находится в пределах их проверки (и так VBA может сказать, какие диапазоны использовать), я код цвета их следующим образом:Выбор нескольких смежных диапазонов отдельно

Set flRange = Application.InputBox("Select the ranges you want to check for flatlining. (To select non-contiguous ranges, hold down CTRL when moving between ranges)", , , , , , , 8) 
flRange.Select 
flRange.Cells.Interior.Color = RGB(255, 222, 117) 

Затем я использую этот цвет, чтобы определить, если диапазон должен анализироваться:

If Cells(1, x).Interior.Color = RGB(255, 222, 117) Then 

Однако, если пользователь выбирает несколько диапазонов (которые должны быть проанализированы отдельно), которые находятся в непосредственной близости друг от друга, VBA будет читать их как часть одного и того же диапазона (так как они имеют одинаковый цвет) ,

Это лучший способ, которым я решил, чтобы пользователи могли вводить несколько несмежных диапазонов для анализа одним и тем же методом, но я не знаю, как решить эту проблему. Если у кого-то есть предложение о том, как лучше закодировать этот макрос, я бы очень признателен ему.

Редактировать: Тим и Джошуа решили это. Спасибо за помощь!

ответ

0

Вы можете переключаться между каждым диапазоном отдельно и явно, а не полагаться на цвета, чтобы их отличать.

Например:

Sub GetRanges() 

    Dim flRange As Range 
    'Dim v_Ranges As Variant 
    Dim i As Integer 

    'Tell code to continue if there is an error 
    On Error Resume Next 

    Set flRange = Application.InputBox("Select the ranges you want to check for flatlining. (To select non-contiguous ranges, hold down CTRL when moving between ranges)", , , , , , , 8) 

    'Resume normal error handling 
    On Error GoTo 0 

    'Check to ensure the range is set 
    If flRange Is Nothing Then Exit Sub 

    'Loop through the separate ranges 
    For Each rngArea In flRange.Areas 
     Debug.Print rngArea.Address 
    Next rngArea 

End Sub 

Если я запускаю макрос и выберите ячейки A1: A8 и клетки C4: C13, выход будет:

$A$1:$A$8 
$C$4:$C$13 

Не зная немного больше о специфически что вы делаете с каждым диапазоном, я не могу погрузиться гораздо глубже, поэтому покажу на этом общем уровне.

Я также взял на себя смелость отрегулировать кнопку отмены для вас. Раньше, если пользователь выбрал «Отмена» при входе в InputBox, произошла ошибка VBA. Это учитывает ошибку, проверяя, чтобы диапазон был установлен перед продолжением, и если диапазон не установлен, код выйдет из подпрограммы.

+1

Или используйте цикл «Для каждого rng ​​в flRange.Areas», где 'rng' будет объектом« Range », представляющим определенную часть всего диапазона. –

+0

Я понятия не имел, что даже существует. Я часто не работаю с прерывистыми диапазонами, я обновил свой код, чтобы включить ваше предложение. – Soulfire

Смежные вопросы