2017-01-17 7 views
0

Я дал Stack Exchange и Google хороший поиск, и я не могу найти точный ответ, который я ищу.Excel VBA: использование свойства .Range.Offset в переменной диапазона возвращает неожиданные значения

У меня возникли проблемы с пониманием значения вернулись с использованием RangeVariable.Range.Offset, НЕ Worksheet.Range.Offset

Я определяю диапазон от А2 до J10, так пропуская первую строку:

Dim myRange As Range 
Set myRange = ActiveSheet.Range("A2", "J10") 

так что теперь я тест с использованием .offset (0 строк, 9 столбцов):

MsgBox myRange.Range("A1").Offset(0, 9).Address 

я вернусь «$ J $ 2», как и следовало ожидать, видя, как «А1» этого диапазона «А2» на листе сам.

Но теперь я использую выше в качестве второго аргумента другого теста собственности .Range:

MsgBox myRange.Range("A1", myRange.Range("A1").Offset(0, 9)).Address 

я вернусь «$ A $ 2: $ J $ 3», так это выглядит, как его пропустили строку вычисления второй аргумент, и он заканчивается тем, что он является диапазоном из двух строк, хотя смещение строки равно нулю.

Если я изменяю смещение строки до -1, он возвращает «$ A $ 2: $ J $ 2», поэтому только одна строка.

Обычно я использую Worksheet.Range для определения диапазонов и всегда работает так, как ожидалось. Может кто-нибудь подумать, почему использование RangeVariable.Range.Offset для второго аргумента свойства диапазона может работать таким образом?

Cheers, Стивен

ответ

0

Я смутно помню предыдущий вопрос вдоль этих линий и я не помню, если он был дан ответ, но это дает ожидаемый результат:

Range(myRange.Range("A1"), myRange.Range("A1").Offset(0, 9)).Address 

EDIT: это было его - selecting a range within a range

EDIT2: Я нахожу это легче работать -

myRange.Range("A1").Resize(1,10).Address 
+0

Привет, Тим, это то, что было после. У меня теперь лучший макрос, я ненавижу логику логики, чтобы получить правильный результат. Использование значения смещения строки -1 для того, чтобы оставаться в одной строке, выглядело некрасиво. Большое спасибо! – Stephen