Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Странная ашипка екцеля :( / 16 сообщений из 16, страница 1 из 1
06.04.2007, 13:31:34
    #34443345
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Господа, специалисты по екцелю, помогите решить проблему. Есть файл, который категорически не хочет открываться (появляется такое сообщение, как на картинке; restart and recover не помогают - файл открывается, но процедуры не работают). Самое странное, что на данном комютере все другие екцелевские файлы открываются и сам екцель работает без проблем, и данный файл открывается на других компютерах тоже без проблем. Как подружить данный файл с данным компом? :)
Подскажите что смотреть в файле, что проверить?

При отладке всё проходит хорошо, при вызове этой процедуры тоже всё хорошо. Но если эту процедуру, запускать автоматом при открытии файла, ругается на жёлтуюю строчку.
Код: 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.
Private Sub CommandButton1_Click()
If Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("D7").Value = "" Then
      Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("GetSutartiesNr").Refresh
      With Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("Update MTTools")
          .CommandText = Array( _
          "Update Judejimas Set Nuolaida = " & _
              Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA4").Value & _
              " , SutartaKaina = " & _
              Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA3").Value & _
              ", sutartiesnr = '" & Workbooks("Samata.XLS").Worksheets("ADO").Range("A9").Value & "'" & _
              " where judid = " & _
              "" & Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("A2").Value)
          .Refresh BackgroundQuery:=True
         .CancelRefresh
      End With
        
    Else
        If MsgBox("Sutartis jau buvo uþregistruota! Ar keisti sumas?", vbYesNo, "Áspëjimas",  0 ,  0 ) = vbYes Then
          With Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("Update MTTools")
            .CommandText = Array( _
            "Update Judejimas Set Nuolaida = " & _
                Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA4").Value & _
                " , SutartaKaina = " & _
                Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA3").Value & _
                " where judid = " & _
                "" & Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("A2").Value)
            .Refresh BackgroundQuery:=True
            .CancelRefresh
          End With
        End If
    End If
    Workbooks("Samata.XLS").Worksheets("Sutartis").Activate
End Sub
Всё остальное вроде в норме. Но почему при открытии файла я вижу такую жуткую ашипку?
...
Рейтинг: 0 / 0
06.04.2007, 13:41:46
    #34443393
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
а если так?
Код: 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.
Private Sub CommandButton1_Click()
If Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("D7").Value = "" Then
      Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("GetSutartiesNr").Refresh
      With Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("Update MTTools")
          .CommandText = Array( _
          "Update Judejimas Set Nuolaida = " & _
              Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA4").Value & _
              " , SutartaKaina = " & _
              Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA3").Value & _
              ", sutartiesnr = '" & Workbooks("Samata.XLS").Worksheets("ADO").Range("A9").Value & "'" & _
              " where judid = " & _
              "" & Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("A2").Value)
          .Refresh BackgroundQuery:=True
          If .Refreshing Then .CancelRefresh
      End With
        
    Else
        If MsgBox("Sutartis jau buvo uþregistruota! Ar keisti sumas?", vbYesNo, "Áspëjimas",  0 ,  0 ) = vbYes Then
          With Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("Update MTTools")
            .CommandText = Array( _
            "Update Judejimas Set Nuolaida = " & _
                Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA4").Value & _
                " , SutartaKaina = " & _
                Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA3").Value & _
                " where judid = " & _
                "" & Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("A2").Value)
            .Refresh BackgroundQuery:=True
            .CancelRefresh
          End With
        End If
    End If
    Workbooks("Samata.XLS").Worksheets("Sutartis").Activate
End Sub
Всё остальное вроде в норме. Но почему при открытии файла я вижу такую жуткую ашипку?[/quot]
...
Рейтинг: 0 / 0
06.04.2007, 13:50:31
    #34443433
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
То же самое... Ещё раз повторюсь - тотже файл на других машинах работает без проблем... Я уже и региональные настройки проверил, думал может из-за них... Нет - все компы настроены одинаково. А что эта вообще за ашипка, какая часть екцеля её провоцирует?
...
Рейтинг: 0 / 0
06.04.2007, 14:40:16
    #34443655
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Ещё вот нашёл. И опять таки только на одном компе ругается.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = False
    With Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("Update MTTools")
        .CommandText = Array( _
        "Update Judejimas Set NuolPrc = " & _
            Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA1").Value & _
            " , AntkPrc = " & _
            Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA2").Value & _
            " where judid = " & _
            "" & Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("A2").Value)
        .Refresh BackgroundQuery:=True
        .CancelRefresh
    End With
End Sub
...
Рейтинг: 0 / 0
06.04.2007, 15:26:01
    #34443862
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Может бред, но как говорили некоторые "Попытка не пытка..."
Попробуй перед выполнением проблемной строки поставить задержку на одну две секунды
Код: plaintext
Application.Wait (Now + TimeValue("0:00:01"))
...
Рейтинг: 0 / 0
06.04.2007, 15:30:49
    #34443884
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
или
Код: plaintext
.Refresh BackgroundQuery:=False
...
Рейтинг: 0 / 0
06.04.2007, 15:59:57
    #34443989
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Нет, не помогло ни то, ни то...
И опять таки, самое интересное,
-если файл открыть и запустить процедуру - всё хорошо,
-если делать аутоопен - на екране ашипка :9,
-если сделать /* .Refresh BackgroundQuery:=False */ и после ашипки на аутоопен сделать ресторе - при втором открытии, ашипки нет. Вапче ничего нет и никакя процера ничего не делает - а это не есть гут.

вот сам файл (кажется мной не тронутый вариант)
...
Рейтинг: 0 / 0
06.04.2007, 16:00:15
    #34443991
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
...
Рейтинг: 0 / 0
06.04.2007, 16:53:17
    #34444216
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
свои изменения пометил "VBAPRO". это не решение проблемы, просто, чтоб файл заработал. Решение - переписать все заново с защитой от ошибок, переменные функций листа должны быть типизированы и правильно использованы в коде,a также проверяться на содержание
...
Рейтинг: 0 / 0
06.04.2007, 22:57:26
    #34444824
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
ByKiSЕщё вот нашёл. И опять таки только на одном компе ругается.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = False
    With Workbooks("Samata.XLS").Worksheets("ADO").QueryTables("Update MTTools")
        .CommandText = Array( _
        "Update Judejimas Set NuolPrc = " & _
            Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA1").Value & _
            " , AntkPrc = " & _
            Workbooks("Samata.XLS").Worksheets("SamataPr").Range("AA2").Value & _
            " where judid = " & _
            "" & Workbooks("Samata.XLS").Worksheets("BendraInfo").Range("A2").Value)
        .Refresh BackgroundQuery:=True
        .CancelRefresh
    End With
End Sub

А скажите мне пожалуйста, в чем сакральный смысл этой пары команд:
Код: plaintext
1.
        .Refresh BackgroundQuery:=True
        .CancelRefresh
Это как в армии сержант над солдатами издевается: "Шагом ма-!Отставить!" А когда у солдата ноги запинаются от неожиданой остановки удивляется "а че это ты упал?"
Поставь BackgroundQuery:=False и убери облом рефреша.
...
Рейтинг: 0 / 0
11.04.2007, 11:28:23
    #34452131
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Спасибо, воспользовался советами - исправил и то что вы сказали, и то что сам ещё нашёл. Уже 2 часа 20 минут никто не жалуется (есть основания пологать, что работает)...
Предложенное "переписать все заново учитывая сакральный смысл всех команд" - вызвает некия сомнения в душе :). Ведь раз код (пусть такой) работает на других машинах - значит причина упомянутой ашипки не он ... А что?
ЗЫ: Любой глюк должен поддаваться объяснению!
...
Рейтинг: 0 / 0
11.04.2007, 11:55:30
    #34452254
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
можно и так, хотя кода не так много. наличие "сакрального смысла" уже плохо, смысл должен быть ясен, тогда будет уверенность что программа дает актуальные данные. Но это требования высокого уровня программирования. Если не до этого, а все работает, то можно и оставить.
...
Рейтинг: 0 / 0
11.04.2007, 12:12:51
    #34452324
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Требования высокого уровня программирования, конечно, надо учитывать, но по ночам не даёт покоя сам факт того, что на одном компе код работал, на другом - нет. Эт что же, на одной машине требования занижены? :)
Кстати, согласен - кода почти что и нет. И хотелось бы подчеркнуть, что ошибки как таковой тоже не было... И упомянутое "а че это ты упал?" обоснованно вызывает недоумение.
...
Рейтинг: 0 / 0
11.04.2007, 18:25:08
    #34454017
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
ByKiSВедь раз код (пусть такой) работает на других машинах - значит причина упомянутой ашипки не он ... А что?
ЗЫ: Любой глюк должен поддаваться объяснению! Конечно должен поддаваться объяснению. Но иногда для нахождения этого объясенения надо копаться на реальном железе :)
Данный кривой код может прекрасно работать на одной машине и не падать на другой - по той простой причине, что первая машина быстрее устанавливает связь с сервером чем вторая. На машине с быстрой сетевой карточкой, с быстрыми свичами на пути до сервера или просто с малой загруженостью оперативной памяти - Эксель успевает установить связь с сервером и начать обмен данными, а потом приходит команда отменить обмен. А на машине с плохой связью или с забитой всякими демонами/вирусами/антивирусами памятью Эксель не успевает подсоединиться к серверу и когда приходит команда на отмену - отменять еще нечего, но через милисекунду после отмены приходит ответ от сервера... Вот тебе и плавающая ошибка.
...
Рейтинг: 0 / 0
11.04.2007, 18:44:12
    #34454074
ByKiS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
Согласен, но (одно НО) - отключив вообще комп от сервера и запустив екцель и открыв файл останавливаемся на
Код: plaintext
qt.Refresh (False)
и сообщаем об ошибке ODBC. И не выбрасываем сообщение об жуткой ашипке (как на скриншоте). Екцель не падает.

Хотя поалуй, в одном Вы точно правы - виновато железо.
...
Рейтинг: 0 / 0
11.04.2007, 21:08:05
    #34454328
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странная ашипка екцеля :(
ByKiSСогласен, но (одно НО) - отключив вообще комп от сервера и запустив екцель и открыв файл останавливаемся на
Код: plaintext
qt.Refresh (False)
и сообщаем об ошибке ODBC. И не выбрасываем сообщение об жуткой ашипке (как на скриншоте). Екцель не падает.Почему же "но"? Это как раз подтверждает мое предположение. Дело в том, что процесс который я в предыдущем посте обозначил как "установить связь с сервером" на самом деле очень многоэтапный, и собственно создание канала до сервера только один из этапов.

В случае фонового рефреша, Эксель во первых создает подключение к серверу (которое само по себе состоит как минимум из трех низкоуровневых операций), потом создает отдельный поток, отдает в новый поток хендл коннекта, этот вторичный поток формирует SQL-запрос, формирует хендл запроса, дает доступ главному потоку к этому хендлу, посылает запрос. Во вторых, ждет пока сервер обработает запрос, получает результат из хендла запроса, информирует об этом главный поток и отдает ему даные результата. И в третьих, убивает хендл запроса, убивает хендл коннекта и наконец завершается.
Когда главный поток (в котором макрос и выполняется) пытается выполнить команду CancelRefresh, он посылает эту команду не вторичному потоку, а в хендл запроса. Чтобы в первую очередь проинформировать об отмене сервер. Тогда запрос автоматически завершится с результатом "отменен". Но это так же означает что на момент команды CancelRefresh, вторичный поток уже должен существовать и он уже должен сидеть в спящем режиме ждать ответ сервера...
Ну а если порвать кабель к серверу, вылезет вполне легальная ошибка "нет связи" на самом первом шаге.

Почему Эксель не проверяет можно ли уже отменять запрос или еще нельзя, и почему он вообще падает если запрос отменен раньше чем создан - это уже другой вопрос :)
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Странная ашипка екцеля :( / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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