Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nem todas as matrizes podem ser redimensionadas. Mesmo matrizes especificamente declaradas como dinâmicas e matrizes dentro de variáveisVariant às vezes são bloqueadas temporariamente. Esse erro tem as seguintes causas e soluções:
Você tentou usar ReDim para alterar o número de elementos de uma matriz de tamanho fixo. Por exemplo, no código a seguir, a matriz
FixedArrfixa é recebida porSomeArrno procedimento e, emNextOneseguida, é 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 SubTorne a matriz original dinâmica em vez de fixa 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 de nível de módulo, na qual um elemento foi passado como um argumento para um procedimento. Por exemplo, no código a seguir,
ModArrayestá uma matriz dinâmica de nível de módulo cujo quadragésimoTestquinto elemento está sendo passado por referência ao 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 SubNão há necessidade de passar um elemento da matriz de nível de módulo nesse caso, pois ele é visível em todos os procedimentos do módulo. No entanto, se um elemento for passado, a matriz será bloqueada para evitar uma desalocação de memória para o parâmetro de referência dentro do procedimento, causando um comportamento imprevisível quando o procedimento retornar.
Você tentou atribuir um valor a uma variável Variant contendo uma matriz, mas a Variant está bloqueada no momento. Por exemplo, se o seu código usa um For Each... Próximo loop Para iterar sobre uma variante contendo uma matriz, a matriz é bloqueada na entrada no loop e, em seguida, liberada no final 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 XUse um para... Próximo , em vez de um Para Cada... Próximo loop para iterar. Quando uma matriz é o objeto de um evento 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.