powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с Excel
8 сообщений из 8, страница 1 из 1
Работа с Excel
    #35284020
vb6-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
Работа с Excel
    #35300067
App.Close
Set App = Nothing
...
Рейтинг: 0 / 0
Работа с Excel
    #35300322
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ШевченкоApp.Close
Set App = Nothing

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

Может App.Quit ?

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

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

Set App = Nothing - не уничтожает ексельник, потому что в ходе генерирования отчета создается новая рабочая книга, которая ссылается на эту же App так что эта ссылка не последняя
...
Рейтинг: 0 / 0
Работа с Excel
    #35302830
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен ваш исходник. Если вы хотите подавить вопросы, поставьте .Saved =True. А на самом деле, зачем вам Set app = Nothing?
...
Рейтинг: 0 / 0
Работа с Excel
    #35303364
Черт. Таки да, ошибся. Не 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
Работа с Excel
    #35303635
vb6-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
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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