Tøm innholdet i celler i VBA ved hjelp av kolonnereferanse

Jeg prøver å få et stykke kode til å tømme dataene i noen celler ved hjelp av kolonnereferansene. Jeg bruker følgende kode:

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

For å gjøre dette får jeg imidlertid en feil i den første .Cells-seksjonen, hva skyldes dette?

Løsning

Du kan få tilgang til hele kolonnen som et område ved hjelp av objektet Worksheet.Columns.

Noe sånt som

Worksheets(sheetname).Columns(1).ClearContents 

bør tømme innholdet i A-kolonnen

Det finnes også objektet Worksheet.Rows hvis du trenger å gjøre noe lignende for rader.


Feilen du får, skyldes sannsynligvis en manglende with-blokk.

Du kan lese om with-blokker her: Microsoft Hjelp

Kommentarer (0)

Som Gary's Student nevnte, må du fjerne prikken før Cells for å få koden til å fungere slik du opprinnelig skrev den. Jeg kan ikke være sikker, siden du bare inkluderte én kodelinje, men feilen du fikk da du fjernet prikkene, kan ha noe å gjøre med hvordan du definerte variablene dine.

Jeg kjørte kodelinjen din med variablene definert som heltall, og det fungerte:

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

Jeg tror ikke at en With-setning er passende for kodelinjen du delte, men hvis du skulle bruke en, ville With stå i starten av linjen som definerer objektet du manipulerer. Her er koden din omskrevet med en unødvendig With-setning:

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

With-setninger er laget for at du skal slippe å skrive kode på nytt og for å gjøre koden enklere å lese. Det er nyttig og hensiktsmessig hvis du gjør mer enn én ting med et objekt. Hvis du for eksempel også vil gjøre kolonnen rød og legge til en tykk svart kant, kan du bruke en With-setning som denne:

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

Ellers må du deklarere rekkevidden for hver handling eller egenskap, som dette:

    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

Jeg håper dette gir deg en forståelse av hvorfor Gary's Student mente at kompilatoren kanskje forventet en With (selv om den var upassende), og hvordan og når en With kan være nyttig i koden din.

Kommentarer (1)

Du trenger en With-setning før dette. Eller gjør .Cells om til Cells.

Kommentarer (1)