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. Até as matrizes especificamente declaradas como dinâmicas e matrizes dentro de variáveis de Variante são, por vezes, bloqueadas temporariamente. Esse erro tem as seguintes causas e soluções:
Tentou utilizar ReDim para alterar o número de elementos de uma matriz de tamanho fixo. Por exemplo, no código seguinte, a matriz
FixedArrfixa é recebida peloSomeArrnoNextOneprocedimento e, em 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 SubTorne a matriz original dinâmica em vez de fixa ao declará-la com ReDim (se a matriz for declarada dentro de um procedimento) ou ao declará-la sem especificar o número de elementos (se a matriz for declarada ao nível do módulo).
Tentou redimensionar uma matriz dinâmica ao nível do módulo, na qual um elemento foi transmitido como um argumento para um procedimento. Por exemplo, no seguinte código,
ModArrayestá uma matriz dinâmica ao nível do módulo cujo 45 elemento está a ser transmitido por referência aoTestprocedimento: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 é necessário transmitir um elemento da matriz ao nível do módulo neste caso, uma vez que está visível em todos os procedimentos no módulo. No entanto, se um elemento for transmitido, a matriz é bloqueada para impedir uma desalocada de memória para o parâmetro de referência no procedimento, causando um comportamento imprevisível quando o procedimento é devolvido.
Tentou atribuir um valor a uma variável variante que contém uma matriz, mas a Variante está atualmente bloqueada. Por exemplo, se o código utilizar um para cada... Ciclo seguinte para iterar sobre uma variante que contém uma matriz, a matriz é bloqueada na entrada no ciclo e, em seguida, libertada na terminação do ciclo:
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 XUtilizar um Para... Seguinte em vez de um Para Cada... Próximo ciclo para iterar. Quando uma matriz é o objeto de um Para Cada... No ciclo seguinte , pode ler a matriz, mas não escrever na mesma.
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.