Очистить содержимое ячеек в 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

Начинается в третьей строке - измените по своему вкусу.