Очистка содержимого ячеек в VBA с помощью ссылки на столбец

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

Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents

Однако я получаю ошибку в первой секции .Cells, почему это происходит?

Решение

Вы можете получить доступ ко всему столбцу как к диапазону, используя объект Worksheet.Columns.

Например:

Worksheets(sheetname).Columns(1).ClearContents 

должно очистить содержимое колонки A

Существует также объект Worksheet.Rows, если вам нужно сделать что-то подобное для строк


Ошибка, которую вы получаете, скорее всего, связана с отсутствием блока with.

О блоках with можно прочитать здесь: Microsoft Help.

Комментарии (0)

Как отметил Gary's Student, вам нужно убрать точку перед Cells, чтобы код работал так, как вы его изначально написали. Я не могу быть уверен, поскольку вы включили только одну строку кода, но ошибка, которую вы получили при удалении точек, может быть связана с тем, как вы определили свои переменные.

Я запустил вашу строку кода с переменными, определенными как целые числа, и она сработала:

Sub TestClearLastColumn()

    Dim LastColData As Long
        Set LastColData = Range("A1").End(xlToRight).Column

    Dim LastRowData As Long
        Set LastRowData = Range("A1").End(xlDown).Row

    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents

End Sub

Я не думаю, что оператор With уместен в той строке кода, которой вы поделились, но если бы вы использовали его, то With должен быть в начале строки, определяющей объект, которым вы манипулируете. Вот ваш код, переписанный с использованием ненужного оператора With:

With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
    .ClearContents
End With

Операторы With предназначены для того, чтобы избавить вас от необходимости перепечатывать код и сделать вашу кодировку более удобной для чтения. Они становятся полезными и уместными, если вы делаете с объектом более одной вещи. Например, если вы хотите также сделать столбец красным и добавить толстую черную рамку, вы можете использовать оператор With следующим образом:

With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
    .ClearContents
    .Interior.Color = vbRed
    .BorderAround Color:=vbBlack, Weight:=xlThick
End With

В противном случае вам пришлось бы объявлять диапазон для каждого действия или свойства, например, так:

    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents
    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).Interior.Color = vbRed
    Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).BorderAround Color:=vbBlack, Weight:=xlThick

Я надеюсь, это даст вам представление о том, почему Gary's Student считал, что компилятор может ожидать With (даже если это было неуместно), и как и когда With может быть полезен в вашем коде.

Комментарии (1)

Перед этим вам нужен оператор With. Или превратите .Cells в Cells.

Комментарии (1)