|
|
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Друзья, проблема такая. Из проекта 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 Все бы ничего, но как только убираю команды по оформлению (как говорил объединение ячеек, и т.п.) ошибки прекрашаются, память освобождается. Вот. Почему так и как всетаки мне можно форматировать таблицу без последствий. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 18:04 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Чтобы Эксель не оставался в памяти, надо чистить память, занятую под него, а не под другие вещи. set wbkNew=nothing set wksNew=nothing set appExcel=nothing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 18:06 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
у меня тоже при программном форматировании некоторыми командами выкидывает ошибку. хотя сам ексель их нормально проглатывает. конкретно какие-сказать не смогу, не помню. просто использовал другие команды форматирования. единстаенное что помню не работала автонумерация по столбцу 1,2,3.... и т.д. вызывал ее программно, задавал все требуемые параметры, все равно хоть убей выдавала ошибку. пришлось построчно проставлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 18:25 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
А у меня вылетало при попытке задать выравнивание текста (например objXLS.Cells(x, 13).HorizontalAlignment = xlCenter), ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 18:29 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
2 Kelme: А замена констант Excel на соответствующие числа в таком случае не помогает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 20:02 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Еще надо сделать xlappExcel.Quit чтобы не оставался в памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 20:59 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Это частая закавыка у Excel, особенно когда пользуемся кодом из макрорекордера. Причина в неявных ссылках на объекты Excel. Иллюстрация xlBook.Close 'Excel закрывается а Workbooks.Close - все, приложение не закроется Посмотри насчет неявных ссылок, команды по оформлению ведь наверно взяты из макрорекордера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 00:35 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Поддерживаю на счет неявных ссылок. Даже в самом 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:02 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
2 SergeySV Проще сделать лист активным, имхо:) 2 Alexander G Абсолютно верно. Если мы в референсах проставим ссылки на ексель и будем делать раннее связывание (Dim xl As New Excel.Application), то всё будет нормально, а если ссылки ставить не будем и сделаем позднее связывание (CreateObject), то код из рекордера работать не будет во многих случаях. Нужно образаться к своим переменным и заменять екселевские константы на числа. 2 ALL (за искл. ХТ) Читать то, что написал Alexander G - и всё будет работать нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:15 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Пытаюсь объединить ячейки 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:23 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. После этого обращаемся к свойсвам листа: xl_sh.[свойство/метод] - всё должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:33 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Dim xl_sh As New Excel.Worksheet Set xl_wb = xl.Workbooks.Open("Otchet.XLS") Set xl_sh = xl_wb.Worksheets(1) Ошибка: Object required :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:43 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Ну вы сначала объявите переменные: 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 можно почитать тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:54 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Спасибо! Нужно было сделать так ... Dim appExcel As Excel.Application ... appExcel.Range("A2:A3").Merge ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 11:32 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Господа здравствуйте! Я тут новый. Долго ищу ответ на свой вопрос, в результате нашел ваш форум. Об этом уже много раз говорилось, но я опять про 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 12:40 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Уважаемый Михайло! Я сталкивался с таким поведением Excel, спрашивал на этом форуме, но не получил дельного совета. То, что, после завершения вывода отчета в Excel, нужно обязательно устанавливать переменные приложения, книг, листов в nothing, иначе Excel останется в памяти и не будет закрываться- ложь. Ровно таже самая программа, выводящая сложноструктурированный отчет с итогами (функция промежуточные итоги), группирующая данные, прекрасно работает, когда относительно мало данных. Когда же данных много (около 1000 строк по 3 листа + лист с графиками), то после построения отчета, когда пользователь закрывает Excel, она остается в памяти, и когда пользователь открывает "мой компьютер", то он не реагирует, приходится снимать зависшую задачу. Известно, что когда завершается работа программы, ее объектные переменные и так получают значение Nothing. Что касается Excel97, то в отличие от 95, лист, на который пишутся данные должен быть активный, иначе работа программы замедляется, особенно если она не размещена в Excel. Я считаю, что решение проблемы следующее: 1. Все, что относится к Excel, явно описывать, несмотря на то, что есть ссылка на библиотеку Excel - маловероятно, что поможет 2. Данные выгружать на временный лист, затем запускать код форматирования, который должен находиться в Excel - обязательно должно помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 16:03 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Там все не так просто. Во первых (блин, нет у меня первого тома Гетца), но помойму Excel относится к таким COM приложениям которые совершенно необязательно выгружаются из памяти после обнуления всех ссылок на него. Т.е. COM объект сам решает, и в случае например с Excel, то он не будет выгружаться если пользователь стал шелкать мышкой по Excel'ю, т.е. вмешался в работу программы, считается что пользователь начал работать с Excel'ем и тогда уже это Excel твоя программы делит вместе с пользователем ито что твоя прога все ссылки обнулила еще ничего не значит, теперь просто уже вся ответсвенность за закрытие лежит на пользователе. (одно неосторожное движение и ты уже отец) Выложи весь код функции, чтобы можно было его протестить, у меня тоже были случае висяки Excel в памяти, но я их все успешно решал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 16:13 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Правда? А почему зависает "Мой компьютер"? Не потому ли, что Excel пытается закрыть себя, но получает сообщение об ошибке и так раз за разом? Я не щелкаю мышью в процессе создания отчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 16:22 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Если открываете New Excel надо, как показывает практика, выйти: .Quit чтобы выгрузить из памяти. (Иначе, если просто Nothing, - вы теряете ссылки, а процесс висит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 16:26 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Уважаемый, мне это прекрасно известно. Возможно Вы невнимательно прочли: ровно один и тот же код , но в зависимости от объема, но не структуры исходных данных , то не приводит к эффекту зависания, то приводит к такому эффекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 16:30 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Возможно это просто глюки, тут надо смотреть конкрентный пример, даже не смотреть, а юзать..... например у меня есть код который работает с Excel минут 15 и ничего, все хорошо закрывается, так что раз на раз.... вернее код на код не приходится, так что надо бы щупать конкретный пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2004, 17:14 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Господа, большое спасибо за ответы! Особенно PaulB! Простите за простой вопрос но мне нужно уточнить. Что значит, «Явно описывать»? Типа так: Dim xl As Excel.Application Dim xlist As Excel.Worksheet Set xl = New Excel.Application Set xlist = New Excel.Worksheet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 08:43 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Уважаемый 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 09:13 |
|
||
|
Что за глюк в Excel'е
|
|||
|---|---|---|---|
|
#18+
Уважаемый PaulB! Спасибо за ответ. Но у меня такая ситуация. Я передаю данные из Access в Excel, строю там всякие линии, определённый порядок данных и так далее, чтобы получить как бы отчёт. Так вот, надо вставить данные и после окончания процесса вставки данных, надо показать эти данные/отчёт, раскрыв Excel (Visible = True), не сохраняя на диске. Как быть в этом случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 09:47 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32416035&tid=1675732]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 354ms |

| 0 / 0 |
