Valor incorreto ao contar células em diferentes versões do Excel
Eu vi alguns usuários SO encontrarem um problema ao tentar usar alguma variação deCells.Count
; o código do VBA lança um erro de estouro em alguns casos.
Para referência, veja comentários sobreesta resposta:
Eu acho que isso vai funcionar, mas eu recebo um erro "estouro" e ele me aponta para o código "Se Master.Cells.SpecialCells (xlCellTypeVisible) .Count> 0 Then" --- parece que não está filtrando nada em particular - user1556069
Isso é onyl funcionando (e Cells.Count não funcionou) porque o último usou um inteiro, 16 bits, valor máximo de 65.536 e toda a planilha retornou um numbr maior? - fast_code
Eu estou supondo que em algum lugar nos bastidores VBA está tentando forçar a contagem de células para um inteiro pequeno (16 bits) ou inteiro longo (32 bits). A contagem de células de uma planilha do Excel 2007 transbordaria esses tipos de dados. Infelizmente, não posso isolá-lo agora porque não tenho uma cópia do Excel 2007 à mão e não posso realmente reproduzir o seu erro. - mwolfe02
Tentando entender isso, tentei me reproduzir e recebi um estouro ao tentar atribuirCells.Count
como um inteiro. Isso faz sentido, pois o valor é muito grande para o tipo de dados Integer.
Usando o código abaixo no Excel 2003 e 2010, recebi um resultado numérico ao tentar atribuir como Longo ou Variante.
Option Explicit
Sub testInteger()
Dim i As Integer
i = Cells.Count 'Overflow
Debug.Print i 'Doesn't get this far...
End Sub
Sub testLong()
Dim l As Long
l = Cells.Count
Debug.Print l 'Prints 16777216 in both versions
End Sub
Sub testVariant()
Dim v As Variant
v = Cells.Count
Debug.Print v 'Prints 16777216 in both versions
End Sub
Como você pode ver nos meus comentários, oCells.Count
valor é16777216
(o que é correto para 2003), mas é o mesmopara ambas as versõese isso não faz sentido para mim. Citarmwolfe02 de uma das respostas acima relacionadas:
As planilhas do Excel 2007 têm 1.048.576 linhas e 16.384 colunas para um total de 17179869184 células.
O que me diz que o valor impresso em 2010 deve ser pelo menos (eu acredito que deveria ser o mesmo)17,179,869,184
.
Então, por que esse número não é impresso corretamente / por que o valor de 2003 retornou em 2010?