2 способа для "ClearContents" на VBA Excel, но 1 работает нормально. Почему? [дубликат]



На этот вопрос уже есть ответ здесь:



Добрый вечер друзья:



Я имею в виду 2 способа очистки содержимого в определенном диапазоне ячеек проекта VBA (в MS Excel):




  1. Worksheets("SheetName").Range("A1:B10").ClearContents

  2. Worksheets("SheetName").Range(Cells(1, 1), Cells(10, 2)).ClearContents


Проблема в том, что второй способ показывает мне ошибку '1004' когда я не смотрю текущий лист " SheetName "(другими словами, когда у меня нет" SheetName " в качестве ActiveSheet).



Первый способ работает безупречно в любой ситуации.

Почему это происходит? Как я могу использовать "второй путь" без этой ошибки?

1279   3  

3 ответов:

Это потому, что вы не определили Cells(1, 1) с объектом листа, и то же самое справедливо для Cells(10, 2). Чтобы код работал, он должен выглядеть примерно так:

Dim ws As Worksheet

Set ws = Sheets("SheetName")
Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents

Попеременно:

With Sheets("SheetName")
    Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With

EDIT : объект Range наследует лист от объектов Cells, когда код выполняется из стандартного модуля или формы пользователя. Если вы запускаете код из модуля кода рабочего листа, вам также потребуется указать Range, например:

ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents

Или

With Sheets("SheetName")
    .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With

Это потому, что вы не полностью квалифицируете свой объект клеток. Попробуйте это

With Worksheets("SheetName")
    .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With

Обратите внимание на точку перед ячейками?

Для числовой адресации ячеек попробуйте включить флажок S1O1 в настройках MS Excel. Это вторая вкладка сверху (то есть формулы), где-то в середине страницы в моей венгерской версии.

Если он включен, он обрабатывает адресацию VBA в обоих стилях, т. е. диапазон("A1:B10") и диапазон(ячейки(1, 1), ячейки(10, 2)). Я предполагаю, что он обрабатывает только стиль Range("A1:B10"), если он не включен.

Удачи!

(обратите внимание, что диапазон ("A1:B10") представляет собой квадрат 2x10, в то время как диапазон (ячейки (1, 1), ячейки (10, 2)) представляет собой 10х2. Использование номеров столбцов вместо букв не повлияет на порядок адресации.)

Comments

    Ничего не найдено.