Pergunta

Estou mantendo um aplicativo que foi escrito em Visual Basic 6.0 e faz uso dos vários controles OLE com objetos de classe Excel.Sheet.8. Vários usuários estão recebendo o seguinte erro quando atingem um ponto no código que tentativas de manipular os objetos do Excel.

Run-time error '91': Variável de objeto ou com variável bloco não definida

A seguir estão exemplos de código que provocam este erro. Eu acredito que o problema acontece em:

Set oExcel = oleXl.object

Aqui estão os pontos no código onde acontece:

Private Sub Form_Load()
    Dim i As Integer
    Dim j As Integer
    Dim sTempStringA As String
    Dim sTempStringB As String

    'Set up excel sheet
    centerform Me

    Set oOutGrid = oleXlOutput.object
...


Private Sub Form_Load()

centerform Me
Set oOtherFx = oleXlFx.object
...

Private Sub Form_Load()
Dim iRet As Integer
Dim i As Integer

On Error GoTo Err_Handler

centerform Me

Call InitArray

Me.Caption = "TJUJ | Version " & version & " | Enter Custom Fx"
Set oBook = oleExcel.object
...

Existe uma situação específica ou ambiente em que este erro seria gerado a partir desta linha de código ou uma maneira que eu posso garantir que o objeto será sempre acessível neste momento no código?

O erro só acontece de vez em quando, e eu não posso reproduzi-lo na minha máquina desenvolvedor em tudo. Eu também não têm acesso às máquinas que está a acontecer, mas parece ser encontrado quando há uma instância do processo EXCEL.EXE em execução.

Foi útil?

Solução

Quando você começa runtime erro 91, você pode apostar que há um algum lugar objeto não inicializado no comunicado. Em outras palavras, você está tentando usar as propriedades ou métodos de uma variável / objeto com um valor de nada.

Em seus exemplos, oleXl, oleXlFx e oleExcel são provavelmente Nada. Então, quando você se referir a sua propriedade Object, você acionar a RTE.

Em algum lugar em seu código estas variáveis ??têm de ser inicializados para alguma coisa. Procure por declarações como Set oleXl = CreateObject("Excel.Application") ou Set oleXl = New Excel.Application

Uma sugestão; quando você encontrar as declarações que realmente inicializar esses objetos OLE, verificar para ver como o tratamento de erros está codificada. Se você ver as coisas como esta:

On Error Resume Next
Set oleXl = CreateObject(...

adicionar um teste para verificar se o objeto foi instanciado

On Error Resume Next
Set oleXl = CreateObject(...
If oleXl Is Nothing Then
   MsgBox "Hey, my object is Nothing!"
End If

Outras dicas

A Microsoft sugere que nós podemos consertar Erro 91 , criando uma nova chave de registo. Para criar uma nova chave, siga os passos abaixo.

  • Clique no menu Iniciar do Windows
  • Tipo Regedit na caixa de pesquisa
  • Pressione Enter
  • Localize a seguinte entrada no registro. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server
  • Agora selecione o servidor de transações e clique direito sobre ela
  • Selecione Novo e em seguida, escolha Key
  • Nome a chave como Debug
  • Botão direito do mouse na chave Debug e escolha Novo
  • Agora selecione Chave e nomeie a chave como RunWithoutContext

Ref: http://backspacetab.com/error-91/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top