Почему Range.Range не работает, как описано в документации MS - PullRequest
1 голос
/ 12 марта 2020

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

Private Sub test10()
  Dim rg1 As Range
  Dim rg2 As Range
  Set rg1 = Worksheets("Sheet1").Range("B1:B1")
  With rg1
    Set rg2 = .Range(.Cells(1, 1), .Cells(1, 1))
  End With
  Debug.Print "rg1.Address: " & rg1.address 'prints $B$1
  Debug.Print "rg2.Address: " & rg2.address 'prints $C$1
End Sub

Должен возвращать фактический диапазон, но сдвигает диапазон на один столбец. Почему это не работает? Это почти так же, как пример, упомянутый здесь https://docs.microsoft.com/en-us/office/vba/api/excel.range.range

1 Ответ

0 голосов
/ 12 марта 2020

Добавление последнего debug.print показывает, что активный лист при запуске макроса не имеет значения.

Активируйте любой лист перед его запуском, и он все равно вернет «Лист1», потому что именно так rg1 определяется.

Private Sub test10()

  Dim rg1 As Range
  Dim rg2 As Range

  'Worksheets("Sheet2").Activate 'uncommenting this line makes no difference as sheet is specified below in rg1
  Set rg1 = Worksheets("Sheet1").Range("B1:B1")

  With rg1
    Set rg2 = Range(.Cells(1, 1), .Cells(1, 1))
  End With

  Debug.Print "rg1.Address: " & rg1.Address 'prints $B$1
  Debug.Print "rg2.Address: " & rg2.Address 'prints $C$1
  Debug.Print rg2.Parent.Name 'prints Sheet1

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...