UsedRange.Le comte de comptage de mal
Résumé: je vais prendre une ligne de données à partir d'une feuille et de le coller dans une autre, mais la feuille serait une utilisation quotidienne le genre de chose où de nouvelles données est entré juste en dessous de données anciennes.
Problème: Sur chaque nouvelle exécution, 7 est toujours ajouté à la UsedRange.Count
. Par exemple: sur l'une d'exécuter le UsedRange.Count
sera de 7; la prochaine fois que je passe par la fonction le comte sera 14.
Ce que je suis à la Recherche De: Pourquoi est-ce le cas et est-il un moyen pour aider à UsedRange
être plus précis
-J'ai inclus l'ensemble de la Fonction pour les références de l'amour.
Function eftGrabber()
Dim usedRows As Integer
Dim i As Integer
ChDir "\\..."
Workbooks.Open Filename:= _
"\\...\eftGrabber.xlsm"
usedRows = Sheets("EFT").UsedRange.Count
Windows("Data").Activate
Sheets("DataSheet").Range("A11").EntireRow.Copy
Windows("eftGrabber").Activate
Sheets("EFT").Range("A" & usedRows + 1).Select
ActiveSheet.Paste
i = usedRows
Do 'THIS LOOP DELETES BLANKS AFTER POSTING NEW LINES
Range("A" & i).Select
If Range("A" & i) = "" Then
ActiveCell.EntireRow.Delete
End If
i = i - 1
Loop Until i = 1
Windows("eftGrabber").Activate
ActiveWorkbook.Save
Windows("eftGrabber").Close
End Function
Laissez-moi savoir si j'ai omis un détail important. Merci à l'avance!
- Mike, vous devriez toujours éviter d'utiliser usedrange. Au lieu de trouver la dernière ligne et l'utiliser pour le collage. Voir ce lien pour trouver la dernière ligne. stackoverflow.com/questions/11169445/...
Vous devez vous connecter pour publier un commentaire.
Changement:
usedRows = Sheets("EFT").UsedRange.Count
À:
usedRows = Sheets("EFT").Range("A" & Sheets("EFT").Rows.Count).End(xlUp).Row
Où "A" peut être changé selon la ligne que vous souhaitez compter le nombre total de colonnes.
Il y a un danger dans l'utilisation de
UsedRange
parce que c'facteurs de telles choses et mise en forme des cellules de l'absence de données et d'autres choses qui peuvent vous donner des résultats inattendus, comme si vous vous attendez à vos données de départ dans la Range("A1"), mais il commence vraiment dans une autre gamme!Je vais dire, cependant, que Si vous voulez vraiment utiliser
UsedRange
, votre code ci-dessus est toujours mal à obtenir les lignes. Utiliser ce lieuUsedRange.Rows.Count
ou pour obtenir la dernière cellule absolue de la UsedRange, utilisezUsedRange.SpecialCells(xlCellTypeLastCell).Row
.Rows
partie. C'est probablement pourquoi.Ce deux ligne de faire de la magie
Pour plus d'informations, visitez le site de Microsoft,
http://msdn.microsoft.com/en-us/library/office/ff196157.aspx
Merci pour la discussion...
.UsedRange.Rows.Count
et.UsedRange.Columns.Count
beau travail fourni il y a quelque chose dans la cellule A1. Autrement besoin d'utiliser le SpecialCells solution.Espère que cela est utile.