Очистить содержимое ячеек в VBA с помощью ссылки на столбцы
Я пытаюсь получить фрагмент кода для очистки данных в некоторых ячейках, используя ссылки столбца. Я использую следующий код:
Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents
Для этого, однако, я получаю сообщение об ошибке в первом разделе .Cells, почему это?
Ответы
Ответ 1
Вы можете получить доступ ко всему столбцу в диапазоне, используя объект Worksheet.Columns
Что-то вроде:
Worksheets(sheetname).Columns(1).ClearContents
должен очистить содержимое столбца A
Существует также объект Worksheet.Rows
, если вам нужно сделать что-то подобное для строк
Ошибка, которую вы получаете, вероятно, связана с отсутствием блока.
О блогах можно прочитать здесь: Справка Microsoft
Ответ 2
Как отметил Гэри Студент, вам нужно будет удалить точку до 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
Надеюсь, это даст вам представление о том, почему Гэри Стьюден считал, что компилятор может ожидать With
(хотя это было неуместно) и как и когда With
может быть полезен в вашем коде.
Ответ 3
Я просто придумал этот очень простой способ очистки всего листа.
Sub ClearThisSheet()
ActiveSheet.UsedRange.ClearContents
End Sub
Ответ 4
Перед этим вам нужно С. Или сделайте .Cells в Ячейках
Ответ 5
Проблема не с оператором with, она находится в функции Range, она не принимает абсолютное значение ячейки.. она должна быть как Range ( "A4: B100" ).. вы можете ссылаться на следующий поток для справки.
следующий код должен работать.
Преобразовать ячейки (1,1) в "A1" и наоборот
LastColData = Sheets(WSNAME).Range("A4").End(xlToRight).Column
LastRowData = Sheets(WSNAME).Range("A4").End(xlDown).Row
Rng = "A4:" & Sheets(WSNAME).Cells(LastRowData, LastColData).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Worksheets(WSNAME).Range(Rng).ClearContents
Ответ 6
Чтобы очистить все строки, у которых есть данные, я использую две переменные, подобные этой. Мне это нравится, потому что вы можете настроить его на определенный диапазон столбцов, если вам нужно. Dim CRow As Integer Dim LastRow As Integer
CRow = 1
LastRow = Cells(Rows.Count, 3).End(xlUp).Row
Do Until CRow = LastRow + 1
Cells(CRow, 1).Value = Empty
Cells(CRow, 2).Value = Empty
Cells(CRow, 3).Value = Empty
Cells(CRow, 4).Value = Empty
CRow = CRow + 1
Loop
Ответ 7
Я нашел, что это простой способ очистки в форме между нужной строкой и столбцом. Я не уверен, что это то, что вы ищете. Надеюсь, что это поможет.
Sub sbClearCellsOnlyData()
Range("A1:C10").ClearContents
End Sub
Ответ 8
Для кого-то вроде меня, который наткнулся на это и нуждается в решении, которое не очищает заголовки, вот один лайнер, который работает для меня:
ActiveSheet.Range("A3:A" & Range("A3").End(xlDown).Row).ClearContents
Начинается в третьей строке - измените по своему вкусу.