| |
|
|
| | Помогите разобраться с Excel.
С помощью следующего кода
Set exclApp = CreateObject("Excel.Application")
With exclApp
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = False
.AutomationSecurity = msoAutomationSecurityLow
.Visible = True
и т.д............
|
создаю com-объект связанный с Excel. Затем с помощью запроса выгружаю в Excel данные.
И уничтожаю com-объект. У меня на экране остается открытый Excel. Но после того, как я его закрываю, он все равно остается в памяти и мне его приходится закрывать с помощью диспетчера задач.
Как с этим бороться? | |
| |
| |
| |
|
|
| | не вижу строк
exclApp.quit
set exclApp=nothing
|
| |
| |
| |
| |
|
|
| | exclApp.quit - закроет Excel а он мне нужен открытый. Я его потом руками закрою. | |
| |
| |
| |
|
|
| | нужно закрыть документ, который Вы создаете после создания экземпляра экселя | |
| |
| |
| |
|
|
| | опять - если я закрою документ то я не увижу его на экране, а пользователю нужно с ним работать дальше и сохранить его по завершению работы при необходимости или отказаться от сохранения. | |
| |
| |
| |
|
|
| | Создать заполнить закрыть убить открыть шеллом. | |
| |
| |
| |
|
|
| | Лучше покажите весь код.
Попробуйте выполнять процедуру не полностью. Сначала кусок, который вы показали, затем добавить кусок кода. Ищите, после каких действий остается процесс. | |
| |
| |
| |
|
|
| |
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. Если его не использовать то проблем не возникает. | |
| |
| |
| |
|
|
| | Нашел ошибку -Destination:=Range("A2") а надо Destination:=tgWsheet!Range("A2")) | |
| |
| |
| |
|
|
| | Да, подобное приводит к тому, что Excel не выгружается.
А я не заметил этот момент, проссматривая ваш код... | |
| |
| |