2016-12-02 4 views
0

Мне нужно получить диапазоны от предварительно заданных столбцов и строки от переменной. Если я попытаюсь получить этот диапазон вручную, все будет работать. Как получить тот же диапазон с помощью переменной? Как я получаю от:excel vba range row from variable

Dim j As Integer 
j = 20 

MsgBox Union(Sheets("Temp").Range("H10:H20"), _ 
      Sheets("Temp").Range("K10:K20")).Address 

... к чему-то вроде этого: (только что он работает?)

MsgBox Union(Sheets("Temp").Range("H10:H" & j), _ 
      Sheets("Temp").Range("K10:K" & j)).Address 
+7

Что не так с этим кодом - все в порядке? – SJR

+0

Кажется, это работает правильно для меня. Какую ошибку вы получаете? –

+0

SJR Я получил себе пробную версию MS Office для своего домашнего ПК, чтобы посмотреть, работает ли это для меня тоже ... Я думаю, что мой компьютер на работе проклят. Mark.R сейчас я не получаю ошибки. Но давайте подождем, пока я вернусь к работе в понедельник. – InnerBushman

ответ

0

Здесь вы идете:

Option Explicit 

Public Sub TestMe() 
    Dim j As Long 
    j = 20 

    MsgBox Union(Sheets(1).Range("H10:H" & j), _ 
       Sheets(1).Range("K10:K" & j)).Address 

End Sub 

Результат:

enter image description here

+0

Сделал ли 'As long' исправление или' Option Explicit'? Не могу проверить сейчас. Я дома. – InnerBushman

+0

Ну, честно говоря, я думаю, что ваше решение тоже работает. Но в VBA нецелесообразно использовать целые числа. И вариант явный - хорошая практика. – Vityata

+0

Получил экзамен MS Office у себя дома. Мой оригинальный код работает для меня здесь. Я понятия не имею, что это неправильно на работе ... узнает в понедельник. – InnerBushman

0

Я думаю, что вы спрашиваете, как вы меняете j (20) в динамическую переменную? если да, то, как это будет делать:

Option Explicit 

Public Sub TestMe() 
    Dim j As Long 
    j = Range("H10").End(xlDown).Row 

    MsgBox Union(Sheets(1).Range("H10:H" & j), _ 
       Sheets(1).Range("K10:K" & j)).Address 

End Sub 

Пожалуйста, обратите внимание: это есть пустая ячейка в столбце H, то j будет строка непосредственно над ним - работой вокруг этого будет j = Range("H" & Columns("H:H").Rows.Count).End(xlUp).Row

+0

Я не хочу, чтобы 'j' стал диапазоном или чем-то еще. Я хочу, чтобы диапазон был ** основан ** на 'j'. Пробелы в строках не имеют значения. Также j-я строка не является последней строкой. – InnerBushman

+0

@InnerBushman Итак, вы хотите, чтобы пользователь вводил j-я строка, а не жестко? – Jeremy

+0

'j' будет заимствован из некоторой другой функции в результате сортировки. Основываясь на некоторых действиях, которые примет пользователь, мой код будет иметь целое число и передать его в 'j' для моей функции. Но сначала я хотел написать свою функцию и протестировать ее, прежде чем интегрировать ее в большее целое. – InnerBushman