powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel 97
17 сообщений из 17, страница 1 из 1
Excel 97
    #32414879
вопрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с Excel 97 если я выполняю дважды этот код,т.е. если в Excel который я создал добавляю WorkBook, а потом закрываю одну книгу он спрашивает типа сохранить я нажимаю нет и Excel с оставшейся рабочей книгой закрывается при этом остается висеть в памяти

Dim ExApp As Excel.Application
Dim ExWrb As Excel.Workbook
Dim ExWsh As Excel.Worksheet

Dim hwnd As Long
On Error Resume Next
Set ExApp = GetObject(, "Excel.Application") ' Пытаемся получить первый уже существующий объект приложение Excel
If Err.Number <> 0 Then
Err.Clear
Set ExApp = CreateObject("Excel.Application")
End If
hwnd = FindWindow("XLMAIN", 0)
If hwnd <> 0 Then ' 0 means Excel not running.
SetWindowPos hwnd, 0, -15000, 0, 0, 0, SWP_NOSIZE + SWP_NOZORDER
End If
If ExApp Is Nothing Then Err.Raise 10001, , "Ошибка при создании объекта Excel"
Set ExWrb = ExApp.Workbooks.Add
Set ExWsh = ExWrb.Sheets.Item(1)
ExWsh.Name = "Выборка "
ExWsh.Range("A1:B1").Value = "Тест"
ExApp.Visible = True
SetWindowPos hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW + SWP_NOSIZE

Set ExWrb = Nothing
Set ExWsh = Nothing
Set ExApp = Nothing
...
Рейтинг: 0 / 0
Excel 97
    #32414911
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExApp.Quit
просто ссылку обнулить не достаточно
...
Рейтинг: 0 / 0
Excel 97
    #32414918
вопрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не нужно его программно закрывать, надо его показать пользователю и если он делает еще раз экспорт то использоваться должен тот же Excel.
...
Рейтинг: 0 / 0
Excel 97
    #32416199
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробывал из Access это вызвать, так у меня вообще при первом открытии закрытии General Protection Fault
...
Рейтинг: 0 / 0
Excel 97
    #32416203
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сделать
Set ExApp = CreateObject("Excel.Application")
ExApp.Visible = True
те сразу за созданием показать приложение, тогда все работает.

Под этот опытный факт можно построить теорию, что Excel по-разному работает с памятью в режиме Visible=true и Visible=false. Это кстати подтверждается и другим простым опытом. Заполнить МНОГО ячеек в Excel пособом типа Cells(i, j)=Value в режиме Visible=false не получится, он просто зависнет, а если Visible=true, то можно заполнить хоть весь лист
...
Рейтинг: 0 / 0
Excel 97
    #32416495
вранье какое-то. Нормально всегда заполнял, и никакой х.ни не было. Надо только сразу опредилить объект(ы) (страницу) в которую пихаете, а не пользоваться по дурости АктивШитом (или АктивВиндоу), как это предлагает рекордер макросов ёкселя. (и адресацию переделать). И не забыть показать результат юзеру, ес-сно (или сохранить, квайтнуться и выйти).
...
Рейтинг: 0 / 0
Excel 97
    #32416677
вопрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТО вранье какое-то
Тебе описали ситуацию в которой происходит ошибка.Если в каком то месте код не правильно написан укажи на это место.А то прогнал пургу какую то.
...
Рейтинг: 0 / 0
Excel 97
    #32416738
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to вранье какое-то

Ну и где-же в приведенном коде ActiveSheet ?

to Вопрос

Помогла ли перестановка строки Visible=true?
...
Рейтинг: 0 / 0
Excel 97
    #32416820
вопрос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вот так пишешь не работает

Dim ExApp As Excel.Application
Dim ExWrb As Excel.Workbook
Dim ExWsh As Excel.Worksheet

On Error Resume Next
Set ExApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set ExApp = CreateObject("Excel.Application")
End If
If ExApp Is Nothing Then Err.Raise 10001, , "Ошибка при создании объекта Excel"
ExApp.Visible = False
Set ExWrb = ExApp.Workbooks.Add
Set ExWsh = ExWrb.Sheets.Item(1)
ExWsh.Name = "Выборка "
ExWsh.Range("A1:B1").Value = "Тест"
ExApp.Visible = True

Set ExWrb = Nothing
Set ExWsh = Nothing
Set ExApp = Nothing

Если ExApp.Visible = False ставишь после Set ExWrb = ExApp.Workbooks.Add
То работает

Dim ExApp As Excel.Application
Dim ExWrb As Excel.Workbook
Dim ExWsh As Excel.Worksheet

On Error Resume Next
Set ExApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set ExApp = CreateObject("Excel.Application")
End If
If ExApp Is Nothing Then Err.Raise 10001, , "Ошибка при создании объекта Excel"
Set ExWrb = ExApp.Workbooks.Add
ExApp.Visible = False
Set ExWsh = ExWrb.Sheets.Item(1)
ExWsh.Name = "Выборка "
ExWsh.Range("A1:B1").Value = "Тест"
ExApp.Visible = True

Set ExWrb = Nothing
Set ExWsh = Nothing
Set ExApp = Nothing
...
Рейтинг: 0 / 0
Excel 97
    #32416838
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExApp.Visible = true
сразу после создания объекта!
Только потом надо добавлять Workbook и тд!
...
Рейтинг: 0 / 0
Excel 97
    #32417204
abuyz! Djn nfr hf,jnftn\r
________________\r
Public Sub xladd()\r
Dim ExApp As Excel.Application\r
Dim ExWrb As Excel.Workbook\r
Dim ExWsh As Excel.Worksheet\r
\r
On Error Resume Next\r
Set ExApp = GetObject(, "Excel.Application")\r
If Err.Number <> 0 Then\r
Err.Clear\r
Set ExApp = CreateObject("Excel.Application")\r
End If\r
If ExApp Is Nothing Then Err.Raise 10001, , "Ошибка при создании объекта Excel"\r
ExApp.Visible = False\r
Set ExWrb = ExApp.Workbooks.Add\r
Set ExWsh = ExWrb.Sheets.Item(1)\r
ExWsh.Name = "Выборка "\r
\'ExWsh.Range("A1:B1").Value = "Тест"\r
ExWsh.Range(ExWsh.Cells(1, 1), ExWsh.Cells(1, 1)).Formula = "Тест"\r
ExApp.Visible = True\r
\r
\r
Set ExWsh = Nothing\r
ExWrb.Close False\r
Set ExWrb = Nothing\r
\'ExApp.Quit\r
Set ExApp = Nothing\r
\r
\r
End Sub\r
_____________\r
nfrjt dgtxfnktybtб xnj jnkflrjq ybrnj yb [thf pfybvfnmcz e\'t yt evttnю tirby rjnю Bkb dgthdjq hfljcnb jn vfplfz dblbnt,
...
Рейтинг: 0 / 0
Excel 97
    #32417213
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q319832&


Еще, попробуй, сделать обьект глобальным, т.е. получай его при первом запуске и уничтожай только при полном выходе или выгрузке рабочего окна.
повторный вызов GetObject, может создать второй инстатнс или скрытый референс.



Magnus
...
Рейтинг: 0 / 0
Excel 97
    #32417326
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to вранье какое-то

ничего не понятно, тк не по-русски. У меня нет перекодировщика, если там были русские буквы

какая разница между красной и зеленой строками. По-моему - никакой, кроме оформления


to Вопрос

Не поленился проверить на VB. Все то же. Если Visible=false GPF, если следующая строка после CreateObject() Visible=true, то все работает
...
Рейтинг: 0 / 0
Excel 97
    #32417330
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
версия Excel 97

У меня предложение к тем кому не лень и есть возможность это у себя проверить. Проверьте! Может это только у меня так глючит, правда у меня при исправлении все работает
...
Рейтинг: 0 / 0
Excel 97
    #32417434
А по ссылке (синяя строчка в начале) сходить было лень?

А проверить, чем отличается "на практике" проверить было лень?

УБИВАТЬ , блииин, ленивцев.

Пишу по русски - залезь в отладчик и поймай строчку с ошибкой. Потом подумай, почему она при визиблетру не совсем ашипка, а при визиблефальш савсем ашипка. Если не дотумкаешь, сходи по ссылке, что я тебе кинул (синяя строчка). там в одном из постов подробно разжевано.

Да, и исправь (ExWsh.Cells(1, 1), ExWsh.Cells(1, 2))
______________
ЗЫ. Лови перекодировщик:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Function Replace_letters(ByVal InputStr As String) As String
Dim enStr As String, rusStr As String
enStr =  "@#$^&QWERTYUIOP{}ASDFGHJKL:"  & Chr( 34 ) &  "ZXCVBNM<>?qwertyuiop[]asdfghjkl;'zxcvbnm,./" & Chr(34) & "№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,йцукенгшщзхъфывапролдэжячсмитьбю."
rusStr = Chr(34) & "№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэячсмитьбю." & "@#$^&QWERTYUIOP{}ASDFGHJKL:" & Chr(34) & "ZXCVBNM<>?qwertyuiop[]asdfghjkl;'zxcvbnm,./" 
Dim i As Integer, pos As Integer, temp As String
For i =  1  To Len(InputStr)
temp = Mid$(InputStr, i,  1 )
pos = InStr( 1 , enStr, temp, vbBinaryCompare)
If pos <>  0  Then
Replace_letters = Replace_letters & Mid$(rusStr, pos,  1 )
Else
Replace_letters = Replace_letters & temp
End If
Next i
End Function
...
Рейтинг: 0 / 0
Excel 97
    #32417521
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to вранье какое-то

Почитал я синий линк. Ну что? Ничего я там не нашел.
Что я должен увидеть в отладчике? Не понятно.

Разницы в строках не вижу, если она так очевидна прошу указать мне такому непонятливому.

Код: plaintext
1.
2.
ExWsh.Range( "A1:B1" ).Value =  "Тест"  
ExWsh.Range(ExWsh.Cells( 1 ,  1 ), ExWsh.Cells( 1 ,  1 )).Formula =  "Тест"  


В чем разница?



Мне кажется причина непонимания в том, что я не совсем точно описал ситуацию. Еще раз по пунктам

1. Выполняю указанный код, при этом я вообще закомментировал все, кроме
Set ExWrb = ExApp.Workbooks.Add
2. После выполнения кода переключаюсь в Excel
3. Нажимаю крестик (кнопку закрытия окна)
4. GPF (General Protection Fault)

Если же команду ExApp.Visible = True, поставить не после, а перед Set ExWrb = ExApp.Workbooks.Add, то все работает
...
Рейтинг: 0 / 0
Excel 97
    #32417530
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Явно проблема с внутренним счетчиком ссылок.
Баги, баги...

Magnus
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel 97
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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