VBA Macro se bloque après 32000 lignes
J'ai une macro VBA qui copie les lignes d'une feuille de calcul dans une autre basée sur la recherche de valeurs dans les cellules en 3 colonnes. La macro fonctionne, mais se bloque lorsqu'il atteint la ligne 32767. Il n'y a pas de formules ou de mise en forme spéciale de cette ligne. De plus, j'ai pris la ligne, mais il se bloque toujours sur la ligne de nombre. Est-ce une limitation dans excel? Il y a quelques 43000 dans la feuille de calcul en cours de processus
Par conséquent, je demande quel est le problème avec ma macro et comment je peux l'obtenir à atteindre la fin de la feuille de calcul:
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
Dim wks As Worksheet
On Error GoTo Err_Execute
Pour Chaque wks Dans des Feuilles de calcul
LSearchRow = 4
LCopyToRow = 4
ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
Set wksCopyTo = ActiveSheet
wks.Rows(3).EntireRow.Copy wksCopyTo.Rows(3)
While Len(wks.Range("A" & CStr(LSearchRow)).Value) > 0
If wks.Range("AB" & CStr(LSearchRow)).Value = "Yes" And wks.Range("AK" & CStr(LSearchRow)).Value = "Yes" And wks.Range("BB" & CStr(LSearchRow)).Value = "Y" Then
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
wksCopyTo.Select
wksCopyTo.Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
wksCopyTo.Paste
'Move counter to next row
LCopyToRow = LCopyToRow + 1
'Go back to Sheet1 to continue searching
wks.Select
End If
LSearchRow = LSearchRow + 1
Wend
Application.CutCopyMode = False
Range("A3").Select
MsgBox "All matching data has been copied."
Next wks
Exit Sub
Err_Execute:
MsgBox "An error occurred."
S'il vous plaît aider!
source d'informationauteur Andy5 | 2012-05-11
Vous devez vous connecter pour publier un commentaire.
Le VBA 'Int' type est signé de 16 bits du champ de sorte qu'il ne peut contenir que des valeurs de -32768 à +32767. Modifier les variables de "Long", qui est un 32-bit signé champ et peuvent contenir des valeurs de -2147483648 à +2147483647. Devrait être suffisant pour Excel. 😉
Cela sonne comme un entier Problème
Mais quelle version utilisez-vous? Parce que:
Cette Information est directement à partir de MSDN
Mise à JOUR
Veuillez également lire le premier commentaire! J'ai été l'interprétation de la MSDN de l'Information dans le mauvais sens!
Vous pouvez éviter l'Entier vs. Long problème en utilisant un Pour Chaque plutôt que l'incrémentation de lignes. Pour Chacun d'eux est généralement plus rapide, est d'éviter la Sélection de Plages. Voici un exemple: