Oi pessoal, sou nova no fórum e tenho alguma experiência em access, porém estou com uma dificuldade para gravar arquivo em excel. Se eu tenho apenas um formulário e a partir dele eu gravo dados em excel funciona perfeitamente, porém, eu quero ter 2 formulários rodando ao mesmo tempo, onde ambos farão gravação de excel. Só que qdo ambos vão gravar ao mesmo tempo, em um deles da erro e fala que o objeto está sendo utilizado.
Até entendo que se eu estivesse gravando dentro do mesmo arquivo (mesmo nome) deveria dar o erro, mas o nome é diferente, então eu entendo que não deveria dar erro nenhum. Vejam os códigos que estou utilizando:
'Função para criar o arquivo (chamada uma única vez no início do processamento)
Public Function criaArquivoExcel(caminho As String, nomeArquivo As String)
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")
ExcelSheet.Application.Visible = False
ExcelSheet.SaveAs caminho & nomeArquivo
ExcelSheet.Application.Quit
Set ExcelSheet = Nothing
End Function
'Função utilizada para gravar em arquivo. Chamada a cada célula a ser gravada.
Public Function gravaArquivo(caminho As String, nomeArquivo As String, linha As Integer, coluna As String, texto As String)
Dim xlWrkBk As excel.Workbook
Dim xlSht As excel.Worksheet
Set xlWrkBk = GetObject(caminho & nomeArquivo)
Set xlSht = xlWrkBk.Worksheets(1)
xlSht.Cells(linha, coluna) = texto
xlSht.Cells.EntireColumn.AutoFit
If linha = 1 Then
xlSht.Cells(linha, coluna).Interior.ColorIndex = 3
xlSht.Cells(linha, coluna).Font.Bold = True
End If
xlWrkBk.Windows(nomeArquivo).Visible = True
xlWrkBk.Save
xlWrkBk.[Close]
Set xlWrkBk = Nothing
End Function
Existe uma outra forma de criar a lógica, de forma que as aplicações não concorram?
Obrigada,
Sue
Até entendo que se eu estivesse gravando dentro do mesmo arquivo (mesmo nome) deveria dar o erro, mas o nome é diferente, então eu entendo que não deveria dar erro nenhum. Vejam os códigos que estou utilizando:
'Função para criar o arquivo (chamada uma única vez no início do processamento)
Public Function criaArquivoExcel(caminho As String, nomeArquivo As String)
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")
ExcelSheet.Application.Visible = False
ExcelSheet.SaveAs caminho & nomeArquivo
ExcelSheet.Application.Quit
Set ExcelSheet = Nothing
End Function
'Função utilizada para gravar em arquivo. Chamada a cada célula a ser gravada.
Public Function gravaArquivo(caminho As String, nomeArquivo As String, linha As Integer, coluna As String, texto As String)
Dim xlWrkBk As excel.Workbook
Dim xlSht As excel.Worksheet
Set xlWrkBk = GetObject(caminho & nomeArquivo)
Set xlSht = xlWrkBk.Worksheets(1)
xlSht.Cells(linha, coluna) = texto
xlSht.Cells.EntireColumn.AutoFit
If linha = 1 Then
xlSht.Cells(linha, coluna).Interior.ColorIndex = 3
xlSht.Cells(linha, coluna).Font.Bold = True
End If
xlWrkBk.Windows(nomeArquivo).Visible = True
xlWrkBk.Save
xlWrkBk.[Close]
Set xlWrkBk = Nothing
End Function
Existe uma outra forma de criar a lógica, de forma que as aplicações não concorram?
Obrigada,
Sue