Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: неубиваемый Excel
 
 автор: dmsrv803   (07.04.2011 в 13:35)   личное сообщение
 
 

Помогите разобраться с Excel.
С помощью следующего кода

Set exclApp = CreateObject("Excel.Application")
 With exclApp
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = False
        .AutomationSecurity = msoAutomationSecurityLow
        .Visible = True
        и т.д............

создаю com-объект связанный с Excel. Затем с помощью запроса выгружаю в Excel данные.
И уничтожаю com-объект. У меня на экране остается открытый Excel. Но после того, как я его закрываю, он все равно остается в памяти и мне его приходится закрывать с помощью диспетчера задач.
Как с этим бороться?

  Ответить  
 
 автор: shanemac51   (07.04.2011 в 14:03)   личное сообщение
 
 

не вижу строк


exclApp.quit
set exclApp=nothing

  Ответить  
 
 автор: dmsrv803   (07.04.2011 в 14:14)   личное сообщение
 
 

exclApp.quit - закроет Excel а он мне нужен открытый. Я его потом руками закрою.

  Ответить  
 
 автор: ДрЮня   (07.04.2011 в 14:18)   личное сообщение
 
 

нужно закрыть документ, который Вы создаете после создания экземпляра экселя

  Ответить  
 
 автор: dmsrv803   (07.04.2011 в 14:39)   личное сообщение
 
 

опять - если я закрою документ то я не увижу его на экране, а пользователю нужно с ним работать дальше и сохранить его по завершению работы при необходимости или отказаться от сохранения.

  Ответить  
 
 автор: Дядя Федор   (07.04.2011 в 15:20)   личное сообщение
 
 

Создать заполнить закрыть убить открыть шеллом.

  Ответить  
 
 автор: Анатолий (Киев)   (07.04.2011 в 15:58)   личное сообщение
 
 

Лучше покажите весь код.
Попробуйте выполнять процедуру не полностью. Сначала кусок, который вы показали, затем добавить кусок кода. Ищите, после каких действий остается процесс.

  Ответить  
 
 автор: dmsrv803   (07.04.2011 в 16:42)   личное сообщение
 
 


Private Sub AddMicrosoftQuery(fName As String)
Dim tempName As String, strSQL As String, fPath As String
Dim sourceWB As Workbook, targetWB As Workbook, tgWsheet As Worksheet, srWsheet As Worksheet

fPath = CurrentProject.Path & "\Reports\"
tempName = "insurance template.xls"

Call CloseExcelApplication

Set exclApp = CreateObject("Excel.Application")
 With exclApp
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = False
        .AutomationSecurity = msoAutomationSecurityLow
        Set targetWB = .Workbooks.Add
        Set sourceWB = .Workbooks.Open(fPath & "Templates\" & tempName, , ReadOnly)
        Set srWsheet = sourceWB.Worksheets("Ëèñò1")
        Set tgWsheet = targetWB.Worksheets("Ëèñò1")
        srWsheet.Cells.Copy (tgWsheet.Cells(1, "A"))
        sourceWB.Close SaveChanges:=False
  End With
  
fPath = CurrentProject.Path
With tgWsheet.QueryTables.Add(Connection:=Array(Array("ODBC;DSN=Áàçà äàííûõ MS Access;DBQ=" & fPath & "\EU.mdb;DefaultDir=" & fPath & _
        ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeou"), Array("t=5;")), Destination:=Range("A2"))
        
        .CommandText = Array("SELECT Nom_Dogovora, Valuta, Clt_Name, Data_Dogovora, Data_Okon_DL, Manager_FIO, " & _
        "'Íîìåð øàññè (Ðàìà)', Model, Marka, Òèï, InsuranceCompany, InsuranceNumber, " & _
        "DateBegin, DateEnd, Expr1001 " & _
        "FROM '" & fPath & "\EU'.InsuranceTempTable InsuranceTempTable")
        
        .Name = "Çàïðîñ èç Áàçà äàííûõ MS Access"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
    
    tgWsheet.QueryTables(1).Refresh
    targetWB.SaveAs (fPath & "\" & GetUniqueFileName(fName, fPath))
    exclApp.Visible = True
End Sub

Private Sub CloseExcelApplication()
Dim iiX As Integer, iiY As Integer

If exclApp Is Nothing Then Exit Sub

With exclApp
    iiY = .Workbooks.Count
    For iiX = 1 To iiY
        .ActiveWorkbook.Close (False)
    Next
    .Quit
End With
End Sub


Мне кажется, что все дело в запросе, который выводит данные в Excel. Если его не использовать то проблем не возникает.

  Ответить  
 
 автор: dmsrv803   (08.04.2011 в 10:02)   личное сообщение
 
 

Нашел ошибку -Destination:=Range("A2") а надо Destination:=tgWsheet!Range("A2"))

  Ответить  
 
 автор: Bellerofont   (09.04.2011 в 23:19)   личное сообщение
 
 

Да, подобное приводит к тому, что Excel не выгружается.
А я не заметил этот момент, проссматривая ваш код...

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList