Страницы: 1
RSS
Указать диапазон в Range с помощью переменных
 
Как в Range указать диапазон с помощью переменных?
Образец:
Код
If Intersect(Target, Range("B:B,O:P")) Is Nothing Then


Что имеем:
Два блока IF:
Код
If Not Intersect(Target, Sheet1.Range(Cells(2, "B"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count - 1, "B"))) Is Nothing Then...
If Not Intersect(Target, Sheet1.Range(Cells(2, "O"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count, "P"))) Is Nothing Then...


PS: Почему не работает такой вариант:
Код
If Not Intersect(Target, Sheet1.Range(Cells(2, "B"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count - 1, "B"))) OR Not Intersect(Target, Sheet1.Range(Cells(2, "O"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count, "P"))) Is Nothing Then...
Изменено: tchack - 05.10.2022 20:05:21
 
Del
Изменено: tchack - 05.10.2022 20:05:07
 
нельзя сказать почему что-то не работает если не понятно "а что, собственно, нужно получить?"
сначала обьяснение словами что хотим
потом пример кода, которым пытаемся достичь поставленной цели
и только потом возможен ответ почему это не получилось
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
сначала обьяснение словами что хотим
В Range прописать два диапазона с помощью переменных.

Можно ли объединить эти два диапазона:
Range(Cells(2, "B"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count - 1, "B")))
Range(Cells(2, "O"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count, "P")))
чтобы получилось как в образце:
Range("B:B,O:P")
 
Код
  Dim c1&, c2&
  c1 = 2: c2 = c1 ^ 4 - 1
  Debug.Print Union(Columns(c1), Columns(c2).Resize(, 2)).Address

с помощью переменных с1 и с2 (видите с2 вычислено) результат см. в окне Immediate
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, спасибо

Код
    Dim TotalRange, rngP1, rngP2 As Range
    Set rngP1 = Sheet1.Range(Cells(2, "B"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count - 1, "B"))
    Set rngP2 = Sheet1.Range(Cells(2, "O"), Cells(Sheet1.Range("B2").CurrentRegion.Rows.Count, "P"))
    Set TotalRange = Application.Union(rngP1, rngP2)
    
    If Not Intersect(Target, TotalRange) Is Nothing Then.....
 
tchack, Возможен такой вариант
Код
Dim TotalRange As Range
    With Range(Cells(2, "A"), Cells(2, "B").CurrentRegion.SpecialCells(xlLastCell))
      Set TotalRange = Range(.Columns("B").Address & "," & .Columns("O:P").Address)
    End With
TotalRange.Select

Правда если задавать адрес для команды Range в виде строки, ограничение всего в 255 символов.
Изменено: testuser - 06.10.2022 12:59:59
Страницы: 1
Наверх