powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Странная ашипка екцеля :(
16 сообщений из 16, страница 1 из 1
Странная ашипка екцеля :(
    #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
Странная ашипка екцеля :(
    #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
Странная ашипка екцеля :(
    #34443433
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же самое... Ещё раз повторюсь - тотже файл на других машинах работает без проблем... Я уже и региональные настройки проверил, думал может из-за них... Нет - все компы настроены одинаково. А что эта вообще за ашипка, какая часть екцеля её провоцирует?
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #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
Странная ашипка екцеля :(
    #34443862
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может бред, но как говорили некоторые "Попытка не пытка..."
Попробуй перед выполнением проблемной строки поставить задержку на одну две секунды
Код: plaintext
Application.Wait (Now + TimeValue("0:00:01"))
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34443884
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или
Код: plaintext
.Refresh BackgroundQuery:=False
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34443989
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не помогло ни то, ни то...
И опять таки, самое интересное,
-если файл открыть и запустить процедуру - всё хорошо,
-если делать аутоопен - на екране ашипка :9,
-если сделать /* .Refresh BackgroundQuery:=False */ и после ашипки на аутоопен сделать ресторе - при втором открытии, ашипки нет. Вапче ничего нет и никакя процера ничего не делает - а это не есть гут.

вот сам файл (кажется мной не тронутый вариант)
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34443991
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34444216
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
свои изменения пометил "VBAPRO". это не решение проблемы, просто, чтоб файл заработал. Решение - переписать все заново с защитой от ошибок, переменные функций листа должны быть типизированы и правильно использованы в коде,a также проверяться на содержание
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #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
Странная ашипка екцеля :(
    #34452131
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, воспользовался советами - исправил и то что вы сказали, и то что сам ещё нашёл. Уже 2 часа 20 минут никто не жалуется (есть основания пологать, что работает)...
Предложенное "переписать все заново учитывая сакральный смысл всех команд" - вызвает некия сомнения в душе :). Ведь раз код (пусть такой) работает на других машинах - значит причина упомянутой ашипки не он ... А что?
ЗЫ: Любой глюк должен поддаваться объяснению!
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34452254
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и так, хотя кода не так много. наличие "сакрального смысла" уже плохо, смысл должен быть ясен, тогда будет уверенность что программа дает актуальные данные. Но это требования высокого уровня программирования. Если не до этого, а все работает, то можно и оставить.
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34452324
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требования высокого уровня программирования, конечно, надо учитывать, но по ночам не даёт покоя сам факт того, что на одном компе код работал, на другом - нет. Эт что же, на одной машине требования занижены? :)
Кстати, согласен - кода почти что и нет. И хотелось бы подчеркнуть, что ошибки как таковой тоже не было... И упомянутое "а че это ты упал?" обоснованно вызывает недоумение.
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34454017
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSВедь раз код (пусть такой) работает на других машинах - значит причина упомянутой ашипки не он ... А что?
ЗЫ: Любой глюк должен поддаваться объяснению! Конечно должен поддаваться объяснению. Но иногда для нахождения этого объясенения надо копаться на реальном железе :)
Данный кривой код может прекрасно работать на одной машине и не падать на другой - по той простой причине, что первая машина быстрее устанавливает связь с сервером чем вторая. На машине с быстрой сетевой карточкой, с быстрыми свичами на пути до сервера или просто с малой загруженостью оперативной памяти - Эксель успевает установить связь с сервером и начать обмен данными, а потом приходит команда отменить обмен. А на машине с плохой связью или с забитой всякими демонами/вирусами/антивирусами памятью Эксель не успевает подсоединиться к серверу и когда приходит команда на отмену - отменять еще нечего, но через милисекунду после отмены приходит ответ от сервера... Вот тебе и плавающая ошибка.
...
Рейтинг: 0 / 0
Странная ашипка екцеля :(
    #34454074
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен, но (одно НО) - отключив вообще комп от сервера и запустив екцель и открыв файл останавливаемся на
Код: plaintext
qt.Refresh (False)
и сообщаем об ошибке ODBC. И не выбрасываем сообщение об жуткой ашипке (как на скриншоте). Екцель не падает.

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

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

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


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