Я пытаюсь заставить часть кода очистить данные в некоторых ячейках, используя ссылки на столбцы. Я использую следующий код:
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.
Как отметил 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
может быть полезен в вашем коде.
Перед этим вам нужен оператор With. Или превратите .Cells в Cells.