|
|
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
Привет народ как нормально обрабатывать ошибки в моей программе взде стоит обрабока ошибок результаты обработки просто ссобщения и почемуто 100 раз она отрабатывает ошибку нормально а на 101 выдает критическую как можно гасить любую возникающую ошибку в приложении или это невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 10:47 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
Ничего невозможного нет. On Error Resume Next - "ибудит тибе щасте". Но не слишком ли большой будет эта радость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 10:50 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
это можно применить только к канкретному куску текста а не к приложению в целом этого у мя и так хватает а вот как бы реально защитить приложение от сбоев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 10:53 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
" ...результаты обработки просто ссобщения ..." Просто сообщений недостаточно, нужно как-то реагировать еще, например, вызывать одни модули и не вызывать другие. И посмотри опции в Tools/General/Error Trapping. И самое главное: избавься от On Error Resume Next. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 20:24 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnсамое главное: избавься от On Error Resume NextПожалуй, я бы не был столь категоричен. Инструкция полезная, а во многих случаях - необходимая (можно даже через пробел: "не обходимая"). Главное - не забывать после неё правильно поставить On Error GoTo ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 21:07 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
:0) Любопытно взглянуть на примеры "необходимая" и "не обходимая"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 22:21 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
Цитата из http://www.cpearson.com/excel/ErrorHandling.htm: A Note Of Caution ...It is tempting to deal with errors by placing an On Error Resume Next statement at the top of the procedure in order to get the code to run without raising an error. This is very bad coding practice. Remember that using On Error Resume Next does not fix errors. It merely ignores them... Я знаю, что люди в принципе используют (я бы сказал, что это даже популярно) On Error Resume Next в сочетании с CommonDialog и его свойством CancelError, а также в событии Form_Resize (классика), но обязательно ли это? Это в определенных случаях помогает сократить код, но подход в целом опасен, так как прячет проблему, а вот всегда ли мы лезем в Err, чтобы ее оттуда извлечь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 22:45 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnЛюбопытно взглянуть на примеры "необходимая" и "не обходимая"!Ну, коли любопытно... "Не обходимая" - например, при заполнении объекта типа Collection значениями с попутным контролем уникальности. Может быть, кроме отключения (resume next) и последующей проверки err.number есть другой способ определить, что в коллекции нет члена с определённым значением ключа, но мне он неизвестен. Насколько я знаю, ключ формируется один раз при добавлении в коллекцию очередного Item, и в дальнейшем по этому ключу можно извлекать элемент, но нет способа прочесть ключ элемента, извлеченного, скажем, в цикле For Each.... Вы знаете такой способ? Поделитесь, плииз :) Другой (впрочем, не очень-то и другой) случай - поиск имени с определённой иерархией областей поиска. Вот пример из боевой программы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 23:22 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
Ч-чёрт, нет возможности редактировать... Поправка: не поиск имени , а поиск диапазона по имени . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 23:31 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
ДмиДми, На первый вопрос ответить чрезвычайно легко: вы используете не тот объект. В вашем случае используют не Collection, а Dictionary, вот и все. Гвозди забивают молотком, а не плоскогубцами. Пойду читать второй пример. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 15:42 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
ДмиДми, Насчет второго примера: Вы бы не могли пояснить, что вы на самом деле подразумеваете под rngID : Name или ID? И для чего вы его передаете ByRef? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 16:25 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnВ вашем случае используют не Collection, а DictionaryВ данном конкретном случае Вы меня убедили: не "не_обходимо", а "необходимо", и даже "иногда необходимо". P.S. Риторический вопрос к победителю: а всегда ли Вам захочется ради одного только метода Exists (без которого легко можно обойтись) подтягивать целую библиотеку и грузить в память ещё один очень даже немаленький объект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 16:50 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnчто вы на самом деле подразумеваете под rngID : Name или ID? И для чего вы его передаете ByRef? 1. Это всегда Name. В качестве побочного эффекта - может быть использована и привычная A1-адресация, но не используется. 2. Так оно исторически сложилось. А сейчас во всю дурь действует древнее правило "пока работает - не трожь!" Имена относительно коротки, можно было бы и в самом деле передавать значение, но незачем возиться: этот код выполняется относительно редко и на быстродействие не влияет, объект с этим свойством только один - стало быть, и память особо не сэкономишь (если сэкономишь вообще). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:01 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnДмиДми, На первый вопрос ответить чрезвычайно легко: вы используете не тот объект. В вашем случае используют не Collection, а Dictionary, вот и все. Гвозди забивают молотком, а не плоскогубцами. Пойду читать второй пример. Успехов. Но если очень хочется, то обойти все равно можно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Успехов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:03 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
ДмиДми VladConnчто вы на самом деле подразумеваете под rngID : Name или ID? И для чего вы его передаете ByRef? 1. Это всегда Name. В качестве побочного эффекта - может быть использована и привычная A1-адресация, но не используется. Спасибо, ДмиДми, Тогда можно сказать следующее: переименуйте rngID в rngName, ID - это что-то для линкованных рангов, по-моему, имя переменной вводит в заблуждение и напрягает. И наконец: зачем вообще потребовалось делать иерархический поиск имени ранга, если все равно все имена рангов внутри данной книги уникальны? Ну так и ищите сразу по всей книге одной строкой, и не надо тогда On Error Resume Next. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:09 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnAddItemToCollectionТакой способ добавления не сопровождается контролем уникальности pstrItem. VladConnзачем вообще потребовалось делать иерархический поиск имени ранга, если все равно все имена рангов внутри данной книги уникальны?Нет. Есть идентичные имена уровня листа (на многих листах, и любое из них может отсылать к диапазону как "своего", так и другого листа) и уровня книги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:23 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
Уникальность Item? Вы об этом не упоминали, и Collection - не тот объект, он не требует уникальности Item. Вы показывали проблему уникальности ключа. И в случае с Item не требуется, кстати, On Error Resume Next, т.к. ошибки не возникает. Успехов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:39 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
Sorry, не ответил сразу. VladConnпереименуйте rngID в rngName, ID - это что-то для линкованных ранговТак оно и есть. Excel в данном случае работает в паре с Access'ом, и в Аксе rngId используется для линковки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:41 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
" ...Нет. Есть идентичные имена уровня листа (на многих листах, и любое из них может отсылать к диапазону как "своего", так и другого листа) и уровня книги. " Если вас не затруднит, покажите способ создания неуникальных имен рангов: звучит странно. Пока я не увижу, что это на самом деле возможно: два разных ранга с одним и тем же именем, я не смогу согласиться с вашим "Нет." А если увижу, то тогда посмотрю, как можно обойти On Error Resume Next. Я подозреваю, что вы смешиваете понятия диапазона клеток и ранга. Успехов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:53 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnУникальность Item? Вы об этом не упоминали, и Collection - не тот объект, он не требует уникальности ItemРазве не упоминал? ДмиДми при заполнении объекта типа Collection значениями с попутным контролем уникальности Уникальности же требует не объект Collection, её требую я. Я строю составной индекс, и ключ - функция нескольких свойств объекта, ссылка на который заносится в коллекцию. Повторение ключа недопустимо, но возможно, так как линкуемые таблицы приходят от неподвластных мне балбесов-операторов. Поэтому одна из первых задач - обнаружить и ликвидировать повторения значений ключа, вызванные ошибками во входных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 18:01 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
ДимДим, вы говорили о проблеме уникальности ключа, а не Item. Требование уникальности Item - не VB-шное, а значит и oшибка не генерируется, а значит и On Error Resume Next не потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 18:06 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnЕсли вас не затруднит, покажите способ создания неуникальных имен рангов: звучит странно. Пока я не увижу, что это на самом деле возможно: два разных ранга с одним и тем же именем, я не смогу согласиться с вашим "Нет." А если увижу, то тогда посмотрю, как можно обойти On Error Resume Next.Вы про Эксель? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 18:08 |
|
||
|
Обработать ошибки
|
|||
|---|---|---|---|
|
#18+
VladConnПока я не увижу, что это на самом деле возможно: два разных ранга с одним и тем же именем, я не смогуУвидев три, сможете? :) Их могло бы быть и больше при большем количестве листов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 18:20 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35312980&tid=2162282]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 264ms |
| total: | 552ms |

| 0 / 0 |
