USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Limpar memória,após abertura de uma planilha excel
Álvaro
Pontos: 2843
GUARULHOS
SP - BRASIL
ENUNCIADA !
Postada em 22/12/2006 09:14 hs            
Gente, gostaria de saber se isso ja aconteceu com vocês.
Estou criando um relatório em uma planilha do excel, só que após eu tentar abrir a planilha pela segunda vez sem fechar o sistema ela da o erro -
run-time error 91:
object variable or with block variable not set
E quando dou um debug, ele abre na parte de mesclar células.
 
Porém quando fecho o sistema e abro em seguida, ele não da erro algum e abre normalmente o excel com o que eu pedi para exibir, o erro acontece apenas quando tento abrir esse relatório mais de uma vez, sem fechar o sistema
 
Os códigos iniciais referente ao excel, estão abaixo
 
    Dim Planilha As Object
    Set Planilha = CreateObject("Excel.Application")
   
    With Planilha
        .Workbooks.Add
        .Visible = True
.
.
.
.
No final
        Set Planilha = Nothing
Eu andei procurando algumas respostas e achei para colocar quit para encerrar, más ele da erro
planilha.quit - da o mesmo erro que o de cima
 
set planilha =quit -  run-time error 424 - object required
 
 
Será que alguém pode me ajudar
 
Desde já agradeço
 
Abraços
   
PH1959
Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
ENUNCIADA !
Postada em 22/12/2006 12:37 hs            
tenta dar um redim na planilha ...talvez funcione
 
   
vilmarbr
Pontos: 2843
SAO PAULO
SP - BRASIL
ENUNCIADA !
Postada em 22/12/2006 15:46 hs         
Este erro :
run-time error 91:
object variable or with block variable not set
Sempre ocorre qdo. vc tenta usar um objeto que ainda não foi instanciado ou já foi desintanciado.
 
Então antes de usar o objeto, sempre verifique se em todas as chamadas ao mesmo, se ele já instanciado em algum momento, por exemplo, usando um break point durante o debug.
 
Caso ele seja de uso geral num form, classe ou módulo, recomento, instanciá-lo no evento Initialize e "matá-lo" apenas no evento Terminate.

http://www.vilmarbro.com.br
   
Álvaro
Pontos: 2843
GUARULHOS
SP - BRASIL
ENUNCIADA !
Postada em 26/12/2006 07:49 hs            
PH1959, tentei criar um redim para a planilha, só que como ela não é uma array, da erro.
Vilmar, o problema não está no instanciamento dos campos e sim quando tento abrir uma nova planilha do excel com os meus resultados tirados do banco de dados, sem reabrir o meu sistema, e estou colocando a abertura desse relatório como um menu, no mdiform, ou seja, tenho apenas o evento click
 
Coloquei os códigos até o momento do erro, onde deixei destacado, apenas re-lembrando, quando inicio o sistema e tiro o relatório na primeira vez, não da erro algum, porém quando tento criar novamente a planulha com o resultado ,sem reabrir o sistema, é ai que da o problema
 
Agradeço pelas dicas que vocês me deram, más infelizmente não resolveram o meu problema, estão peço novamente a ajuda de vocês
 
Abraço a todos
 
    Dim Data1, Data2, Periodo
    Dim Planilha As Object
   
    Dim DB As Database
    Dim Relat As Recordset
   
    Dim Linha As Double
    Data1 = 0
    Data2 = 0
   
    Data1 = InputBox("Digite a data inicial do período, tudo junto ex:01012001")
    If Data1 = "" Then
        MsgBox "Relatório Cancelado", vbInformation
        Exit Sub
    Else
        Data1 = Format(Data1, "@@/@@/@@@@")
        If CDate(IsDate(Data1)) = False Then
            MsgBox "Digite uma data válida e/ou sem as barras, ex: 01012001"
            Exit Sub
        End If
    End If
   
    Data2 = InputBox("Digite a data final do período, tudo junto ex:01012001")
    If Data2 = "" Then
        MsgBox "Relatório Cancelado", vbInformation
        Exit Sub
    Else
        Data2 = Format(Data2, "@@/@@/@@@@")
        If CDate(IsDate(Data2)) = False Then
            MsgBox "Digite uma data válida e/ou sem as barras, ex: 01012001"
            Exit Sub
        End If
    End If
    Periodo = CDate(Data1) & " a " & CDate(Data2)
    'Carregar o Excel:
    Set Planilha = CreateObject("Excel.Application")
   
    With Planilha
        .Workbooks.Add
        .Visible = True
       
        Set DB = OpenDatabase(App.Path & "Cadastro.mdb")
        Set Relat = DB.OpenRecordset("Relatorio", dbOpenTable)
       
        'Valores Inicio da planilha, formatação
        'linha em negrito em toda a planilha
        .Range("A1:R50").Select
        .Selection.Font.Bold = True
   
        'Mudando cor de fundo e fonte
        'passando um traço cinza em toda a linha
        .Rows("1:3").Select
        .Selection.Font.ColorIndex = 5
   
        .Range("A4:R4").Select
        .Selection.Interior.ColorIndex = 15
       
        .Range("A6:R6").Select
        .Selection.Interior.ColorIndex = 15
        '-----
       
        'Textos em cada linha
        .Range("A1") = "INFORMAÇÕES PARA FOLHA DE PAGAMENTO"
        .Range("A2") = "PERÍODO DE CONTAGEM DAS HORAS EXTRAS E FALTAS: " & Relat!Periodo
        .Range("A3") = "PERÍODO SOBRE O VENCIMENTO DE SETEMBRO: " & Relat!Periodo
        .Range("C4") = "VENCIMENTOS"
        .Range("K4") = "DESCONTOS"
        .Range("C6") = "Horas Extras/Semanais (H)"
        .Range("G6") = "Folga Trabalhada (H)"
        .Range("I6") = "AD.NOT"
        .Range("J6") = "VT PAGO EM DINHEIRO"
        .Range("K6") = "FALTA DIA"
        .Range("M6") = "QTDE DE DSR"
        .Range("N6") = "ATRASOS (HORAS)"
        .Range("O6") = "GRATIFICAÇÃO"
        .Range("P6") = "ADIANTAMENTOS (R$)"
        .Range("Q6") = "Refeição (R$)"
        .Range("R6") = "VT PAGO EM junho/06 R$"
        .Range("C7") = "50%"
        .Range("D7") = "60%"
        .Range("E7") = "80%"
        .Range("F7") = "100%"
        .Range("G7") = "100%"
        .Range("H7") = "150%"
        .Range("I7") = "(H)"
        .Range("J7") = "VT"
        .Range("K7") = "QTDE DIA"
        .Range("L7") = "QTDE HORA"
        .Range("R7") = "DESCONTO"
        .Range("A8") = "CHAPA"
        .Range("B8") = "NOME"
        .Range("C8") = "LIMITE 25H"
        .Range("D8") = "LIMITE 15H"
        .Range("E8") = "LIMITE 20H"
        .Range("F8") = "ACIMA DE 60H"
        .Range("J8") = "R$"
        .Range("R8") = "R$"
       
        '----
        'deleta planilhas extras
        .Sheets("Plan2").Delete
        .Sheets("Plan3").Delete
        '----
       
        'mescla a primeira linha
        .Range("A1:R1").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        .Selection.Merge
        '-----
 
 
.
.
.
.
   end with
   set planilha=nothing
TÓPICO EDITADO
 
Martini
Pontos: 2843 Pontos: 2843
PAROBÉ
RS - BRASIL
ENUNCIADA !
Postada em 26/12/2006 13:16 hs         
fecha o serviço:
 
  ps = "C:TempPstoolspskill excel"
  Shell ps
   
Álvaro
Pontos: 2843
GUARULHOS
SP - BRASIL
ENUNCIADA !
Postada em 26/12/2006 14:35 hs            
Martini eu coloquei esse endereço q vc me falou no final dos códigos, porém quando chega no shell ps ele fala que o arquivo não encontrado
Quando eu dou ctrl + alt + del e vou em gerenciador de tarefas - aplicativos ele fica como microsoft excel - pasta 1 e na parte de processos fica EXCEL.EXE
 
Tentei colocar como excel.exe para ver se ele reconhecia e infelizmente nada, não criei nenhum atributo para esse ps, é necessário criar algum atriburo para ele, tipo string ou algo parecido?
 
O final do meu código ficou assim
    End With
    Set Planilha = Nothing ' ja tentei com e sem essa linha
    ps = "C:TempPstoolspskill excel.exe" ' ja tentei como e sem esse .exe
    Shell ps
Abraço
   
Página(s): 1/3      PRÓXIMA »

CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página