powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Что за глюк в Excel'е
25 сообщений из 29, страница 1 из 2
Что за глюк в Excel'е
    #32415999
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, проблема такая.
Из проекта Access передаю данные в Excel известным способом.

'Объявляю переменные Dim appProject As Object
Dim appExcel As Excel.Application
Dim rstProjects As ADODB.Recordset
Dim intCurrTask As Integer
Dim wbkNew As Excel.Workbook, wksNew As Excel.Worksheet
Dim rngCurr As Excel.Range

потом

rstProjects.Open _
"execute sp_Перекрестный запрос '" & Param & "'", _
CurrentProject.Connection, adOpenKeyset

Set appExcel = New Excel.Application
Set wbkNew = appExcel.Workbooks.Add
Set wksNew = wbkNew.Worksheets.Add

wksNew.Name = "Отчет"

и т.д

Потом добавляю Заголовки и т.д.

В принципе отчет готов, но никак не удается его успешно отформатировать (объеденить ячейки там, удалить столбци и т.д.). Первый раз все получается успешно, а на второй начинают вылизать разные ошибки. И еще Excel даже после закрытия остается в памяти, хотя делаю

'Очищаем память
rstProjects.Close
Set rstProjects = Nothing

Все бы ничего, но как только убираю команды по оформлению (как говорил объединение ячеек, и т.п.) ошибки прекрашаются, память освобождается.
Вот.
Почему так и как всетаки мне можно форматировать таблицу без последствий.
Заранее спасибо.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416006
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Чтобы Эксель не оставался в памяти, надо чистить память, занятую под него, а не под другие вещи.

set wbkNew=nothing
set wksNew=nothing
set appExcel=nothing
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416032
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня тоже
при программном форматировании
некоторыми командами
выкидывает ошибку.
хотя сам ексель их
нормально проглатывает.
конкретно какие-сказать
не смогу, не помню.
просто использовал другие
команды форматирования.
единстаенное что помню не работала
автонумерация по столбцу
1,2,3.... и т.д.
вызывал ее программно, задавал
все требуемые параметры, все равно
хоть убей выдавала ошибку.
пришлось построчно проставлять.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416035
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня вылетало при попытке задать выравнивание текста (например objXLS.Cells(x, 13).HorizontalAlignment = xlCenter),
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416119
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Kelme:
А замена констант Excel на соответствующие числа в таком случае не помогает?
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416155
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще надо сделать
xlappExcel.Quit
чтобы не оставался в памяти
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416219
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это частая закавыка у Excel, особенно когда пользуемся кодом из макрорекордера. Причина в неявных ссылках на объекты Excel.
Иллюстрация
xlBook.Close 'Excel закрывается
а
Workbooks.Close - все, приложение не закроется
Посмотри насчет неявных ссылок, команды по оформлению ведь наверно взяты из макрорекордера.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416414
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддерживаю на счет неявных ссылок.

Даже в самом Excel могут начаться из-за них проблемы, вот например такой код работать не будет, если активный лист не "Лист1":

Worksheets("Лист1").Range(Cells(1,1), Cells(3,3)).Select

Причина.... конечно же в объекте Cells - он неявно ссылается на активный лист. Если вы сейчас на Листе2, то получается незадачка - письмо в Россию в город Берлин :) Правильно писать надо с указанием полного пути, вот так:

Worksheets("Лист1").Range(Worksheets("Лист1").Cells(1,1), Worksheets("Лист1").Cells(3,3)).Select
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416445
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergeySV
Проще сделать лист активным, имхо:)

2 Alexander G
Абсолютно верно. Если мы в референсах проставим ссылки на ексель и будем делать раннее связывание (Dim xl As New Excel.Application), то всё будет нормально, а если ссылки ставить не будем и сделаем позднее связывание (CreateObject), то код из рекордера работать не будет во многих случаях. Нужно образаться к своим переменным и заменять екселевские константы на числа.

2 ALL (за искл. ХТ)
Читать то, что написал Alexander G - и всё будет работать нормально.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416463
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь объединить ячейки

End With
Worksheets("Отчет").Range(Worksheets("Отчет").Cells(1, 1), Worksheets("Отчет").Cells(3, 3)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
получаю ошибку
Method 'Worksheets' of object '_Global' failed 16
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416485
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
    Dim xl_sh As New Excel.Worksheet
            Set xl_wb = xl.Workbooks.Open(fname)
            Set xl_sh = xl_wb.Worksheets( 1 )


После этого обращаемся к свойсвам листа:
xl_sh.[свойство/метод] - всё должно работать.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416513
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim xl_sh As New Excel.Worksheet
Set xl_wb = xl.Workbooks.Open("Otchet.XLS")
Set xl_sh = xl_wb.Worksheets(1)

Ошибка:
Object required
:-(
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416536
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы сначала объявите переменные:
Dim XL As Object
Dim xl_wb As Workbook
Dim xl_sh As Worksheet

Set XL = CreateObject("excel.application")
Set xl_wb = XL.Workbooks.Add
Set xl_sh = xl_wb.Worksheets(1)

Про сравнение методов експорта в Excel можно почитать тут
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32416628
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Нужно было сделать так
...
Dim appExcel As Excel.Application
...
appExcel.Range("A2:A3").Merge
...
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458298
Михайло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа здравствуйте!
Я тут новый. Долго ищу ответ на свой вопрос, в результате нашел ваш форум. Об этом уже много раз говорилось, но я опять про Excel – который остаётся в памяти. Я всё вроде делаю правильно но он все равно не удаляется. И вот, что самое интересное, скажем у меня есть три процедуры которые передают данные из Access в Excel, методы передачи данных одинаковые, так вот, две процедуры работают нормально, а вот первая нет. А между тем, она отличается от остальных лишь только тем, что работает дольше (5 минут). Господа, помогите, пожалуйста, как быть?


Dim ExcelObj, ExcelList As Variant

Set ExcelObj = CreateObject("Excel.Application")
ExcelObj.Workbooks.Add
Set ExcelList = ExcelObj.ActiveWorkbook.ActiveSheet



Set ExcelList = Nothing
Set ExcelObj = Nothing
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458748
Михайло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите...
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458881
PaulB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый Михайло!
Я сталкивался с таким поведением Excel, спрашивал на этом форуме, но не получил дельного совета. То, что, после завершения вывода отчета в Excel, нужно обязательно устанавливать переменные приложения, книг, листов в nothing, иначе Excel останется в памяти и не будет закрываться- ложь.
Ровно таже самая программа, выводящая сложноструктурированный отчет с итогами (функция промежуточные итоги), группирующая данные, прекрасно работает, когда относительно мало данных. Когда же данных много (около 1000 строк по 3 листа + лист с графиками), то после построения отчета, когда пользователь закрывает Excel, она остается в памяти, и когда пользователь открывает "мой компьютер", то он не реагирует, приходится снимать зависшую задачу. Известно, что когда завершается работа программы, ее объектные переменные и так получают значение Nothing. Что касается Excel97, то в отличие от 95, лист, на который пишутся данные должен быть активный, иначе работа программы замедляется, особенно если она не размещена в Excel. Я считаю, что решение проблемы следующее:
1. Все, что относится к Excel, явно описывать, несмотря на то, что есть ссылка на библиотеку Excel - маловероятно, что поможет
2. Данные выгружать на временный лист, затем запускать код форматирования, который должен находиться в Excel - обязательно должно помочь.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458897
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там все не так просто.

Во первых (блин, нет у меня первого тома Гетца), но помойму Excel относится к таким COM приложениям которые совершенно необязательно выгружаются из памяти после обнуления всех ссылок на него. Т.е. COM объект сам решает, и в случае например с Excel, то он не будет выгружаться если пользователь стал шелкать мышкой по Excel'ю, т.е. вмешался в работу программы, считается что пользователь начал работать с Excel'ем и тогда уже это Excel твоя программы делит вместе с пользователем ито что твоя прога все ссылки обнулила еще ничего не значит, теперь просто уже вся ответсвенность за закрытие лежит на пользователе. (одно неосторожное движение и ты уже отец)

Выложи весь код функции, чтобы можно было его протестить, у меня тоже были случае висяки Excel в памяти, но я их все успешно решал.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458918
PaulB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правда? А почему зависает "Мой компьютер"? Не потому ли, что Excel пытается закрыть себя, но получает сообщение об ошибке и так раз за разом?
Я не щелкаю мышью в процессе создания отчета.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458931
Quit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если открываете New Excel
надо, как показывает практика, выйти:
.Quit
чтобы выгрузить из памяти. (Иначе, если просто Nothing, - вы теряете ссылки, а процесс висит).
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32458943
PaulB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый, мне это прекрасно известно. Возможно Вы невнимательно прочли: ровно один и тот же код , но в зависимости от объема, но не структуры исходных данных , то не приводит к эффекту зависания, то приводит к такому эффекту.
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32459054
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно это просто глюки, тут надо смотреть конкрентный пример, даже не смотреть, а юзать..... например у меня есть код который работает с Excel минут 15 и ничего, все хорошо закрывается, так что раз на раз.... вернее код на код не приходится, так что надо бы щупать конкретный пример
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32460050
Михайло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, большое спасибо за ответы!
Особенно PaulB!

Простите за простой вопрос но мне нужно уточнить.
Что значит, «Явно описывать»? Типа так:

Dim xl As Excel.Application
Dim xlist As Excel.Worksheet


Set xl = New Excel.Application
Set xlist = New Excel.Worksheet
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32460071
PaulB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый SergeySV!
Спасибо за желание помочь. Но мой код достаточно большой, я и сам решал много различных проблем, программирую A97 более 5 лет. Боюсь, что Вы не знаете что искать. Только могу сказать: если объект описан как variant, а к нему применяются методы, такие как merge и т.п., то описание объекта как range не приведет к желаемому результату. К тому же у меня все объекты, описаны соответсвующе и передаются в другие процедуры точно также.

Уважаемый Михайло!
Я предполагаю следующее:
Public oApp As Object, wbkReport As Workbook
Sub Test()
Set oApp = GetObject(, "Excel.Application")
oApp.Visible = True
oApp.WindowState = xlMaximized
Set wbkReport = oApp.Workbooks.Add("c:\test.xlt")
'Было
wbkReport.Worksheets(0).range("A1:A2").merge
'Стало
oApp.wbkReport.Worksheets(0).range("A1:A2").merge

End Sub
...
Рейтинг: 0 / 0
Что за глюк в Excel'е
    #32460121
Михайло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый PaulB! Спасибо за ответ.
Но у меня такая ситуация. Я передаю данные из Access в Excel, строю там всякие линии, определённый порядок данных и так далее, чтобы получить как бы отчёт. Так вот, надо вставить данные и после окончания процесса вставки данных, надо показать эти данные/отчёт, раскрыв Excel (Visible = True), не сохраняя на диске. Как быть в этом случае?
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Что за глюк в Excel'е
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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