Notifications
Clear all

erro 91

4 Posts
1 Usuários
0 Reactions
3,582 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Sou novo no forum e nao sei se tem algo sobre esse assunto.

Peço a sua ajuda para soulucionar o erro 91 (a variavel with nao foi definida) na linha de codigo abaixo

Private Sub cmdAnterior_Click()

Linha = Linha - 1

If Linha < 3 Then

Linha = 2

cmdAnterior.Enabled = False

End If

If Linha > TotalReg Then

cmdProximo.Enabled = True

End If

MostrarReg

End Sub

Obrigado.

 
Postado : 17/05/2012 12:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Erro 91 é um erro "amplo", pode ser causado por diversos fatores, e nem sempre é onde há a interrupção do codigo.
Aparentemente no trecho mostrado, apesar da não declaração das variaveis envolvidas, não há algo que possa ter causado esse erro; porem pode ter sido algo na rotina do formulario, portanto se possivel disponibilise a planilha/codigo completo, assim poderá (não é garantido) que seja localizado onde está o ponto que realmente está causando erro.
Veja o que diz o help do excel sobre esse erro

Variável de objeto ou variável do bloco With não definida (Erro 91)

Há duas etapas para criar uma variável de objeto. Primeiramente, você deve declarar a variável de objeto. Depois, deve atribuir uma referência válida à variável de objeto usando a instrução Set. De modo semelhante, um bloco With...End With deve ser inicializado executando o ponto de entrada da instrução With. As causas e soluções desse erro são as seguintes:

Você tentou usar uma variável de objeto que já não faz referência a um objeto válido.
Especifique ou reespecifique uma referência para a variável de objeto. Por exemplo, se a instrução Set fosse omitida no código a seguir, um erro seria gerado na referência a MyObject:

Dim MyObject As Object ' Criar variável de objeto.
Set MyObject = Sheets(1) ' Criar referência de objeto válida.
MyCount = MyObject.Count ' Atribuir valor de Count para MyCount.

Você tentou usar uma variável de objeto que foi definida para Nothing.
Set MyObject = Nothing ' Liberar o objeto.
MyCount = MyObject.Count ' Fazer uma referência a um objeto liberado.

Especifique novamente uma referência para a variável de objeto. Por exemplo, use uma nova instrução Set para definir uma nova referência ao objeto.

O objeto é válido, mas não foi definido porque a biblioteca de objetos na qual ele está descrito não foi selecionada na caixa de diálogo Referências.
Selecione a biblioteca de objetos na caixa de diálogo Adicionar referências.

O destino de uma instrução GoTo está dentro de um bloco With.
Não salte para um bloco With. Certifique-se de que o bloco seja inicializado executando o ponto de entrada da instrução With.

Você especificou uma linha dentro de um bloco With quando escolheu o comando Definir próxima instrução.
O bloco With deve ser inicializado executando a instrução With.

Para obter informações adicionais, selecione o item em questão e pressione F1 (no Windows) ou HELP (no Macintosh).

 
Postado : 17/05/2012 12:49 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Deu esse mesmo erro na linha de codigo anterior, dai foi soh acrescentar o with Registro e solucionaou o problema.

O fato que estou aprendendo e nao entendi por que acrescentando isso dah certo. nao sei, nessa linha de codigo, onde colocar o with

Private Sub cmdLimpar_Click()

LimpaCampos

End Sub

Sub LimpaCampos()

Set Agenda = Application.Worksheets("Dados")

With Registro
lblCodigo.Caption = Agenda.Range("Registro").Value + 1
End With

txtNome.Value = ""
txtEmail.Value = ""

End Sub

 
Postado : 17/05/2012 1:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Lincoln, a explicação do Reinaldo é rica em informações, e uma coisa que normalmente costumo dizer, é que muitos esquecem ou nem chegam a ver a rica biblioteca que tem a ajuda do VBA, lá temos todas as informações, exemplos para testar, e no que se refere as questões basicas do VBA, deixa muita apostila na mão, procure dar uma olhada pressionando F1 na tela do editor do vba e verá.

Apesar de tudo, vou tentar explicar um pouco da Instrução With :
O texto abaixo foi tirado da ajuda do VBA :
Instrução With
Executa uma série de instruções em um objeto ou em um tipo definido pelo usuário.

Sintaxe
With object
[statements]
End With

A sintaxe da instrução With possui as seguintes partes:
Parte...........Descrição
object.........Obrigatória. Nome de um objeto ou um tipo definido pelo usuário.
statements....Opcional. Uma ou mais instruções a serem executadas em object.

Comentários
A instrução With permite executar uma série de instruções em um objeto específico sem requalificar o nome do objeto. Por exemplo, para alterar um número de diferentes propriedades de um objeto, posicione as instruções de atribuição de propriedades dentro da estrutura de controle With, referindo-se ao objeto uma vez em vez de fazê-lo em todas as atribuições de propriedade. O exemplo a seguir ilustra o uso da instrução With para atribuir valores a diversas propriedades do mesmo objeto.

With MyLabel
.Height = 2000
.Width = 2000
.Caption = "Este é MyLabel"
End With

Observação Uma vez inserido um bloco With, object não pode ser alterado. Como resultado, você não pode usar uma única instrução With para afetar um número de diferentes objetos.

Você pode aninhar instruções With posicionando um bloco With dentro do outro. Entretanto, em razão de os membros de blocos With externos ficarem mascarados dentro dos blocos With internos, você deve fornecer uma referência de objeto totalmente qualificada em um bloco With interno para qualquer membro de um objeto existente em um bloco With externo.

Observação Em geral, recomenda-se que você não salte para dentro ou para fora de blocos With. Se as instruções em um bloco With forem executadas, mas a instrução With ou End With não for, uma variável temporária contendo uma referência ao objeto permanecerá na memória até que você saia do procedimento.

Ok, agora, pela rotina que postou destacando a Instrução With, eu acredito que devemos ter em algum lugar as definições para :
Set Agenda = Application.Worksheets("Dados"), e,
With Registro, me refiro as duas variaveis com o mesmo nome, geralmente não aconselhamos para evitar erros e ficar mais facil identificar ao que estamos nos referindo, se um controle ou outro tipo de objeto, veja na rotina abaixo uma explicação sucinta, pelo menos do que me lembro desta rotina quando eu a criei :

    'Declaramos o Objeto(Representa uma planilha, O objeto Worksheet)
    Dim Agenda As Worksheet
    
    'Atribuimos uma referência ao objeto
    'Neste caso a Variavel Agenda passará a representar a Aba de nome "Dados"
    Set Agenda = Application.Worksheets("Dados")
    
    
    With Registro 'Aqui, "Registro" se refere ao nome que se deu ao Formulário na propriedade (Name)
        
        'Na linha abaixo "Registro" se refere ao Range nomeado
        'e "lblCodigo" ao nome dado ao controle Label
        lblCodigo.Caption = Agenda.Range("Registro").Value + 1
    
    End With
    
    'Instrução With serve para Eeecuta uma série de instruções em um objeto, atribuindo
    'Varias Propriedades ao controle sem ter de ficarmos
    'repetindo o nome do controle e do formulario

    'Na linha acima onde utilizamos o With, se não quisermos utilizar esta instrução
    'a linha ficaria assim:
    'Registro.lblCodigo.Caption = Agenda.Range("Registro").Value + 1

Lógicamente, na explanação acima, ou utilizamos : "With Registro" ou a referencia direta ao controle e o que queremos.

Espero ter conseguido explicar um pouco sobre a Instrução With, qualquer duvida, retorne.

[]s

 
Postado : 17/05/2012 7:45 pm