Тормоз заполнения ячеек Excel!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Тормоз заполнения ячеек Excel!

Сообщение JohnK » 14.06.2004 (Пн) 23:03

Как этого избежать?
Порой приходиться ждать около 5 мин!!!!

Set XL = XL.ActiveWorkbook.Sheets.Application
XL.Sheets("Лист1").Select
XL.Range("F6").Value = mys1
XL.Range("F31").Value = mys1
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Сообщение TEH3OP » 15.06.2004 (Вт) 0:03

Ну... хоть это и ОФФТОПИК IMHO, отвечу всёж...
Попробуйте следующее:
Код: Выделить всё
dim clsXLRange as Exel.Range
Set clsXLRange = ActiveWorkbook.Sheets("Лист1").Range("F6")
clsXLRange.Value = mys1
Set clsXLRange = ActiveWorkbook.Sheets("Лист1").Range("F31")
clsXLRange.Value = mys1

... хотя странно, что у тебя две ячейки заполняются 5 минут, мож стоит проапгрейдить свой 486-й до пня второго... ;-)
А использование Selection и Select, есть идеологически неправильное и теологически еретичное использование творений дядюшки Билла! ;-)
... особливо ежели окно Ёкселя видимое!

Alex404
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.09.2002 (Вс) 10:58

Сообщение Alex404 » 15.06.2004 (Вт) 8:41

Ну еще так можно..

Код: Выделить всё
ActiveSheet.Cells(6, 6) = mys1
ActiveSheet.Cells(31, 6) = mys2

Не должно оно тормозить...не должно!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.06.2004 (Вт) 10:36

На время изменений отключи перерисовку и автоматическую калькуляцию.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.06.2004 (Вт) 10:39

alibek, скажи мне...
Я примерно то же самое делаю, только меняю interior.colorindex. Жутко тормозит на моём далеко не последнем компе. Эксель невидимый вообще.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.06.2004 (Вт) 10:46

Сейчас попробовал в Immediate поменять ColorIndex, вроде бы не тормозит...
[EDIT] И в процедуре попробовал, менял Value и Interior.ColorIndex, пять ячеек, 10 мс.

Калькуляцию я отключаю через
Application.Calculation=xlCalculationManual/xlCalculationAutomatic
скорость заполнения увеличивается на порядок.
А перерисовку я что-то не найду никак, в каком-то проекте я ее использовал, поискать надо
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.06.2004 (Вт) 10:55

Так это screenupdating, всё это понятно...
У меня ячеек так четыреста, он их секунд 15 красит.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: Тормоз заполнения ячеек Excel!

Сообщение codemaster » 15.06.2004 (Вт) 13:51

JohnK писал(а):Как этого избежать?
Порой приходиться ждать около 5 мин!!!!

Set XL = XL.ActiveWorkbook.Sheets.Application
XL.Sheets("Лист1").Select
XL.Range("F6").Value = mys1
XL.Range("F31").Value = mys1


Опиши подробней что делаешь и как

заодно см. http://www.rsdn.ru/article/com/excelcache.xml

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 19.06.2004 (Сб) 0:06

XL.Workbooks.Open filen
Set XL = XL.ActiveWorkbook.Sheets.Application
XL.Sheets("Лист1").Select

'В цикле
cel1 = Trim(Str(i + 9))
XL.Range("C" & cel1).Value =...
....

2-3 страницы
Вот и Тормоз!
Причем каждый раз чищу!
XL.Range("B10:I17").Select: XL.Selection.ClearContents
вот![code][/code]
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 20.06.2004 (Вс) 14:48

Мужики. Ну обсуждался ведь здесь класс для работы с Excelem. Вот он. Скорость просто мгновенная, при этом не надо подключать к проекту библиотеку самого Excelя. Один минус - при заполнении ячеек у него проблемы с русскими буквами :? (зарубежным кодером сделан о россиянах тот не позаботился, но ведь есть исходники).
Вложения
Excel_Clas3441511102001.zip
(52.17 Кб) Скачиваний: 44

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 20.06.2004 (Вс) 14:53

Лень ковыряться в исходниках, но если сделать - будет очень полезная и серьезная вещь. Работает ведь даже без Officа. Еще раз повторюсь скорость несравнимо выше, чем, если через библиотеку Excelя.

Alex404
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.09.2002 (Вс) 10:58

Сообщение Alex404 » 20.06.2004 (Вс) 21:11

Ну уважаемый MOV ты блин даешь! :lol:
Я уже запарился тебе тиражировать решение проблемы с кирилицей! :batman: Помню два поста были (похоже недавно ушли с первой страницы)
Выложу еще раз, тем более что класс действительно стОящий.

Так вот! В начале в модуле класса прописываем свойство RussianSupport

Код: Выделить всё
Private Type PRINT_RUSSIAN_SUPPORT
  opcode As Integer
  Length As Integer
  Param1 As Byte
  Param2 As Byte
End Type


Public Property Let RussianSupport(ByVal newvalue As Boolean)

On Error GoTo Write_Error
If newvalue = False Then Exit Property
    Dim RUSSIAN_SUPPORT As PRINT_RUSSIAN_SUPPORT
   
    With RUSSIAN_SUPPORT
      .opcode = 66 'int (&H42)
      .Length = 2 'int
      .Param1 = 1 'byte
      .Param2 = 128 'byte
    End With
    Put #FileNumber, , RUSSIAN_SUPPORT

Exit Property

Write_Error:
Exit Property
End Property

Затем уже в теле процедуры создающей файл :
Код: Выделить всё
With myExcelFile
            .RussianSupport = True
....
....
...
End with

Проверил. Работает

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 20.06.2004 (Вс) 23:22

Все класс!!! А вот как печатать!!!??? :shock:
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 21.06.2004 (Пн) 7:47

Alex404
Огромное спасибо. :D :D Самому смешно, видно я просто забыл про эту свою тему а тут снова выпал случай поднять ее.
Пойду испытывать.

Все класс!!! А вот как печатать!!!???
Я бы прописал в макросе автозапуска самого документа Excleя что-то типа
Лист1.PrintOut 1, 1, 1, 1, lpt1, -1 (аргументы посмотришь, отрегулируешь как тебе надо).
То есть потом открываешь документ, он идет на печать, ну или не идет :D , (если тебе не надо, чтобы он каждый раз при открытии шел на печать, соответственно в макросе пропишешь какие-нибудь условия, ну разберешься вобщем).

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 21.06.2004 (Пн) 23:40

Да не, не подходит !
Мне нужно из VB програмно послать на печать без участия юзера.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 25.06.2004 (Пт) 22:18

Дамсь... А мож как-то еще можно? :roll:
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList