Conteúdo claro de células em VBA usando referência de coluna

Estou a tentar obter um pedaço de código para limpar os dados em algumas células, utilizando as referências das colunas. Estou a utilizar o seguinte código:

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

Para o fazer, contudo estou a receber um erro na primeira secção .Cells, porque é que isto acontece?

Solução

Pode aceder a toda a coluna como um intervalo utilizando o Worksheet.Columns object

Algo do género:

Worksheets(sheetname).Columns(1).ClearContents 

deve limpar o conteúdo da coluna A

Há também o Worksheet.Rows objecto se precisar de fazer algo semelhante para as filas


O erro que está a receber é provavelmente devido a um bloco em falta.

Pode ler sobre com blocos aqui: Ajuda Microsoft

Comentários (0)

Como Gary's Student mencionou, teria de remover o ponto antes de 'Células' para fazer o código funcionar como o escreveu originalmente. Posso'não tenho a certeza, uma vez que só incluiu uma linha de código, mas o erro que obteve quando apagou os pontos pode ter algo a ver com a forma como definiu as suas variáveis.

Corri a sua linha de código com as variáveis definidas como inteiros e funcionou:

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

Eu não'não penso que uma declaração "Com" seja apropriada à linha de código que partilhou, mas se utilizasse uma, a "Com" estaria no início da linha que define o objecto que está a manipular. Aqui está o seu código reescrito utilizando uma declaração desnecessária "Com":

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

"Com" as declarações são concebidas para o poupar de digitar novamente o código e para tornar a sua codificação mais fácil de ler. Torna-se útil e apropriado se fizer mais do que uma coisa com um objecto. Por exemplo, se quiser também tornar a coluna vermelha e adicionar uma borda preta grossa, poderá utilizar uma declaração "Com" como esta:

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

Caso contrário, teria de declarar o intervalo para cada acção ou propriedade, como esta:

    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

Espero que isto lhe dê uma ideia da razão pela qual Gary's Student acreditava que o compilador poderia estar à espera de um "Com" (apesar de ser inadequado) e como e quando um "Com" pode ser útil no seu código.

Comentários (1)

É necessária uma declaração Com antes disto. Ou fazer os .Cells em Cells.

Comentários (1)