Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с Excel / 8 сообщений из 8, страница 1 из 1
28.04.2008, 16:30
    #35284020
vb6-excel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Excel
Здравствуйте! Поможите, пожалуйста, кто чем может))

Имеет место следующий косяк:
при генерировании отчета в Excel программа на VB6 создает новый excel-файл
Код: plaintext
1.
2.
3.
4.
Dim app As excel.Application = New excel.Application
<... работаем-работаем ...>
app.Visible = True
Set app = Nothing
затем пользователь начинает пользоваться прокруткой (скроллинг колесиком мышки, например) и идут жутчайшие лаги, просто нереальные.
пользователь сохраняет приложение на диск, закрывает файл, открывает сохраненный - и всё замечательно и шустренько.

доп. инфо:
в первом случае система жутко грузится процессом csrss.exe (прочитал что это такое, но на дельные мысли ниразуненатолкнуло, кроме разве что вируса, но сисадмин говорит что всё ок).
в первом случае процесс excel.exe создается как дочерний процесса winlogon.exe, а во втором - explorer.exe

кто-нибудь сталкивался с похожим поведением?
...
Рейтинг: 0 / 0
07.05.2008, 15:13
    #35300067
Работа с Excel
App.Close
Set App = Nothing
...
Рейтинг: 0 / 0
07.05.2008, 16:15
    #35300322
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Excel
Роман ШевченкоApp.Close
Set App = Nothing

Может App.Quit ?
...
Рейтинг: 0 / 0
07.05.2008, 16:19
    #35300335
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Excel
VladConn Роман ШевченкоApp.Close
Set App = Nothing

Может App.Quit ?

Черт, а зачем же Set App = Nothing? Вы корячите процесс, а юзер-то пытается как-то тыкать в него мышкой. Вы процесс делаете видимым, мол на конфетку, и хлоп - убиваете его.
...
Рейтинг: 0 / 0
07.05.2008, 21:37
    #35301014
vb6-excel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Excel
насколько я понимаю:

App.Quit - закрыть приложение Excel, при этом пользователя спросят не хочет ли он сохранить то что прога нагенерила, после чего если будет нажата кнопка "Отмена", то всё станет по-старому, а если че-нить другое, то файл закроется, т.е. вобщем-то большого выигрыша нет...

Set App = Nothing - не уничтожает ексельник, потому что в ходе генерирования отчета создается новая рабочая книга, которая ссылается на эту же App так что эта ссылка не последняя
...
Рейтинг: 0 / 0
08.05.2008, 15:45
    #35302830
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Excel
Нужен ваш исходник. Если вы хотите подавить вопросы, поставьте .Saved =True. А на самом деле, зачем вам Set app = Nothing?
...
Рейтинг: 0 / 0
08.05.2008, 19:02
    #35303364
Работа с Excel
Черт. Таки да, ошибся. Не Close a Quit

ВОт вам пример живого кода функции, передающую в Эксель результаты запроса и форматирующая данные в Экселе:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Public Function TrasferExcel() 'Функция передачи данных в Эксель
Dim oExcel As Object, oBook As Object, oSheet As Object, sqlstr As String, db As DAO.Database, fso As New FileSystemObject, fil
  
'Проверяем наличие папки C:\MATHERIALS Если нету - создаем
  If ExistDir("C:\MATHERIALS") = False Then
  fso.CreateFolder ("C:\MATHERIALS")
  End If
  
   
  Me.ProgressBar1.Value =  85 
  
  sqlstr = "SELECT 0 AS FOLDER_ID, MATHERIALS.REFERENCE, IIf(MATHERIALS.UNIT='м',(((Fix((Round(Sum(MATHERIALS.[Sum-STKOUT_QTY]),2))/6))+1)*6),(Round(Sum(MATHERIALS.[Sum-STKOUT_QTY]),2))) AS [Sum-Sum-STKOUT_QTY], MATHERIALS.DESCRIPTION, MATHERIALS.UNIT, Z.[Sum-QTY], X.[Sum-SM2] " & _
"FROM MATHERIALS, (SELECT Sum(Z2.QTY) AS [Sum-QTY] FROM (SELECT MATHERIALS.QTY FROM MATHERIALS GROUP BY MATHERIALS.QTY, MATHERIALS.FOLDER_ID) AS Z2) AS Z, (SELECT Sum(X2.SM2) AS [Sum-SM2] FROM (SELECT MATHERIALS.SM2 FROM MATHERIALS GROUP BY MATHERIALS.SM2, MATHERIALS.FOLDER_ID) AS X2) AS X " & _
"GROUP BY 0, MATHERIALS.REFERENCE, MATHERIALS.DESCRIPTION, MATHERIALS.UNIT, Z.[Sum-QTY], X.[Sum-SM2] " & _
"ORDER BY MATHERIALS.DESCRIPTION;"

  
   Set db = DAO.OpenDatabase(App.Path & "\at.mdb")
   Set Me.Data1.Recordset = db.OpenRecordset(sqlstr)
   
   
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets("Лист1")
   oExcel.Visible = False
    If Me.Data1.Recordset.RecordCount <  1  Then
    MsgBox "Данных, за указанный период, удовлетворяющим заданным условиям найдено не было." & vbCrLf & "Экспорт в EXCEL  невозможен",  48 , "ВОЗВРАЩЕН ПУСТОЙ НАБОР ДАННЫХ"
    oExcel.Application.Cells.Select
    oExcel.Application.Range("A1").Activate
    oExcel.Application.Selection.ClearContents
    oExcel.Application.Range("A2").Select
    oBook.Save
    oExcel.Quit
    Set oExcel = Nothing
    vOsh = True
Exit Function
...
Рейтинг: 0 / 0
09.05.2008, 00:34
    #35303635
vb6-excel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Excel
VladConnЕсли вы хотите подавить вопросы, поставьте .Saved =True.
я не хочу подавить вопросы, я вообще не хочу чтобы ексельник закрывался, пользователь в нем смотрит сгенерированный отчет, если хочет - подправляет что-нибудь и если хочет - сохраняет.

VladConnА на самом деле, зачем вам Set app = Nothing?
потому что приложение Excel не выгружается из памяти, пока есть хотя бы одна ссылка на хотя бы один его объект, т.е. даже если пользователь закроет окошко, но app будет продолжать ссылаться на Excel.Application, приложение будет висеть в памяти, а ссылка app сама уничтожится только после выхода из Sub, генерирующей отчет, и хотя "ручное" обнуление ссылки примерно совпадает с концом процедуры, это, ИМХО, просто правило хорошего тона при обращении с такими объектами.
по крайней мере можно гарантировать, что проблема не в этой строчке, вот что я хочу сказать)))

VladConnНужен ваш исходник.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Private Sub GenReport()
  On Error GoTo ErrMsg

  Dim app As excel.Application
  Dim wb As excel.Workbook
  Dim ws As excel.Worksheet
  Dim wr As excel.Range
    
  Set app = New excel.Application
  Set wb = app.Workbooks.Add
  Set ws = wb.Worksheets( 1 )
  
  app.ErrorCheckingOptions.NumberAsText = False
  app.EnableEvents = False
  
  '....исключительно заполнение ячеек, врядли представляет интерес?  .....

  ws.PageSetup.Orientation = xlLandscape
  ws.PageSetup.Zoom =  93 
  ws.PageSetup.CenterHorizontally = True
  ws.PageSetup.PrintGridlines = True
  ws.PageSetup.TopMargin =  15 
  ws.PageSetup.BottomMargin =  15 
  ws.PageSetup.LeftMargin =  10 
  ws.PageSetup.RightMargin =  5 
  ws.Name = Me.Caption
  
  ws.PageSetup.LeftFooter = "&7" + ws.Name + " [" + ServerName + "]"
  ws.PageSetup.CenterFooter = "&7" + "Страница &P"
  ws.PageSetup.RightFooter = "&7" + UserFullName + ", " + CStr(Date) + " (" + CStr(Time) + ")"
  ws.PageSetup.FooterMargin =  2 
  
  ws.Cells( 4 ,  1 ).Select
  app.ActiveWindow.FreezePanes = True
  
  Set wr = ws.Cells
  wr.WrapText = True
  Set wr = Nothing
  
  ws.Rows( 1 ).AutoFit
  
  app.Visible = True
  Set ws = Nothing
  Set wb = Nothing
  Set app = Nothing
  
  Exit Sub

ErrMsg:
  MsgBox Err.Description, vbCritical, Str(Err.Number)
  app.Visible = True
  Set app = Nothing
End Sub



Роман ШевченкоВОт вам пример живого кода функции, передающую в Эксель результаты запроса и форматирующая данные в Экселе:
искренне Вам признателен за попытку помочь и отзывчивость... но дело в том, что данные у меня нормально формируются и выгружаются. проблема не в этом, а в том, что на некоторых компьютерах при этом очень сильно лагает скроллинг до момента сохранения файла, вобщем по-моему в первом топике достаточно подробно проблема описана, но если требуются какие-то уточнения - с удовольствием опишу всё что надо, сам понятия не имею как подступиться...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с Excel / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]