J'essaie d'obtenir un morceau de code pour effacer les données dans certaines cellules, en utilisant les références de colonne. J'utilise le code suivant:
Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents
Pour ce faire, cependant, je reçois une erreur dans la première section .Cells, pourquoi?
Vous pouvez accéder à toute la colonne sous forme de plage à l'aide de l'objet Worksheet.Columns
Quelque chose comme:
Worksheets(sheetname).Columns(1).ClearContents
devrait effacer le contenu d'une colonne
Il y a aussi l'objet Worksheet.Rows
si vous devez faire quelque chose de similaire pour les lignes
L'erreur que vous recevez est probablement due à un bloc manquant avec.
Vous pouvez en savoir plus sur les blocs ici: Aide de Microsoft
Comme Gary's Student l'a mentionné, vous devez supprimer le point avant Cells
pour que le code fonctionne comme vous l'avez écrit à l'origine. Je ne peux pas en être sûr, car vous n’avez inclus que la ligne de code, mais l’erreur que vous avez eu lorsque vous avez supprimé les points pourrait avoir un rapport avec la façon dont vous avez défini vos variables.
J'ai couru votre ligne de code avec les variables définies comme des entiers et cela a fonctionné:
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
Je ne pense pas qu'une instruction With
convienne à la ligne de code que vous avez partagée, mais si vous en utilisiez une, la With
serait au début de la ligne qui définit l'objet que vous manipulez. Voici votre code réécrit en utilisant une instruction With
inutile:
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
.ClearContents
End With
Les instructions With
sont conçues pour vous éviter de retaper du code et pour faciliter la lecture de votre code. Cela devient utile et approprié si vous faites plus d’une chose avec un objet. Par exemple, si vous souhaitez également transformer la colonne en rouge et ajouter une bordure noire épaisse, vous pouvez utiliser une instruction With
comme celle-ci:
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
.ClearContents
.Interior.Color = vbRed
.BorderAround Color:=vbBlack, Weight:=xlThick
End With
Sinon, vous devez déclarer la plage pour chaque action ou propriété, comme ceci:
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
J'espère que cela vous donne une idée de la raison pour laquelle l'élève de Gary pense que le compilateur peut s'attendre à une With
(même si c'était inapproprié) et comment et quand une With
peut être utile dans votre code.
Je viens de trouver cette méthode très simple pour effacer une feuille entière.
Sub ClearThisSheet()
ActiveSheet.UsedRange.ClearContents
End Sub
Pour effacer toutes les lignes contenant des données, j'utilise deux variables comme celle-ci. J'aime ça parce que vous pouvez l’ajuster à une certaine plage de colonnes si vous avez besoin de ..__ Corbeau faible comme un entier 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
Pour tous ceux qui, comme moi, ont rencontré ce problème et ont besoin d'une solution qui ne supprime pas les en-têtes, voici le liner qui fonctionne pour moi:
ActiveSheet.Range("A3:A" & Range("A3").End(xlDown).Row).ClearContents
Commence à la troisième rangée - changez à votre convenance.
Vous avez besoin d'une déclaration With avant cela. Ou transformez les .Cells en Cells
Le problème ne vient pas de l'instruction with, mais de la fonction Range. Elle n'accepte pas la valeur absolue de la cellule. Elle doit ressembler à Range ("A4: B100"). Vous pouvez vous référer au fil suivant pour référence. .
le code suivant devrait fonctionner .. Convertissez les cellules (1,1) en "A1" et inversement
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
J'ai trouvé cela un moyen facile de nettoyer dans une forme entre la ligne souhaitée et la colonne. Je ne sais pas si c'est ce que vous recherchez. J'espère que ça aide.
Sub sbClearCellsOnlyData()
Range("A1:C10").ClearContents
End Sub