OLE Excel objeto de manipulação de causas de erro de tempo de execução '91'
-
22-07-2019 - |
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.
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