Essa matriz foi corrigida ou bloqueada temporariamente (Erro 10)
Nem todas as matrizes podem ser redimensionadas. Mesmo matrizes especificamente declaradas como dinâmicas e matrizes dentro de variáveis Variant às vezes são bloqueadas temporariamente. Esse erro tem as seguintes causas e soluções:
Você tentou usar o ReDim para alterar o número de elementos de uma matriz de tamanho fixo . Por exemplo, no código a seguir, a matriz
FixedArr
fixa é recebida peloSomeArr
no procedimento e, emNextOne
seguida, é feita uma tentativa de redimensionarSomeArr
:Sub FirstOne Dim FixedArr(25) As Integer ' Create a fixed-size array and NextOne FixedArr() ' pass it to another procedure. End Sub Sub NextOne(SomeArr() As Integer) ReDim SomeArr(35) ' Error 10 occurs here. '. . . End Sub
Torne a matriz original dinâmica em vez de fixada declarando-a com ReDim (se a matriz for declarada dentro de um procedimento) ou declarando-a sem especificar o número de elementos (se a matriz for declarada no nível do módulo).
Você tentou redimensionar uma matriz dinâmica no nível do módulo, na qual um elemento foi passado como argumento para um procedimento. Por exemplo, no código a seguir,
ModArray
está uma matriz dinâmica no nível do módulo cujo elemento 45 está sendo passado por referência aoTest
procedimento:Dim ModArray () As Integer ' Create a module-level dynamic array. '. . . Sub AliasError() ReDim ModArray (1 To 73) As Integer Test ModArray(45) ' Pass an element of the module-level ' array to the Test procedure. End Sub Sub Test(SomeInt As Integer) ReDim ModArray (1 To 40) As Integer ' Error occurs here. End Sub
Não é necessário passar um elemento da matriz no nível do módulo nesse caso, pois ele está visível em todos os procedimentos no módulo. No entanto, se um elemento for passado, a matriz será bloqueada para impedir uma desalocação da memória para o parâmetro de referência dentro do procedimento, causando um comportamento imprevisível quando o procedimento retorna.
Você tentou atribuir um valor a uma variável Variant que contém uma matriz, mas a Variant está bloqueada no momento. Por exemplo, se o código usar um For Each... Próximo loop para iterar em uma variante que contém uma matriz, a matriz é bloqueada na entrada no loop e, em seguida, lançada no término do loop:
SomeArray = Array(9,8,7,6,5,4,3,2,1) For Each X In SomeArray SomeArray = 301 ' Causes error since array is locked. Next X
Usar um For... Em seguida , em vez de um para cada... Próximo loop para iterar. Quando uma matriz é o objeto de um For Each... No próximo loop, você pode ler a matriz, mas não gravar nela.
Saiba mais selecionando o item em questão e pressionando F1 (no Windows) ou HELP (no Macintosh).
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários