есть файлик. в файлике на событие листа SelectionChange задан обработчик с вполне безобидным кодом.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' что-то еще...
If ActiveCell.Column - Me.[a7].Value >= 0 And ActiveCell.Column - Me.[a7].Value <= 17 Then
wsInv.Shapes("here").Visible = True
wsInv.Shapes("here").Left = ActiveCell.Left + (ActiveCell.Width - wsInv.Shapes("here").Width) / 2 ' проблема!!!
Else
wsInv.Shapes("here").Visible = False
End If
End Sub
проблема: на одном из компьютеров заказчика этот код в строке с комментарием вываливается в странную ошибку Run-time error '-2147024909 (80070057)': Указанное значение выходит за допустимые пределы
подробности: на компьютере, на котором это возникает - Excel 2013. впрочем, на остальных компьютерах заказчика - то же самое. у меня - Excel 2010.
wsInv - кодовое имя активного листа. объект (автофигура) с именем "here" на этом листе существует. впрочем - иначе ошибка возникала бы в предыдущей строке и была бы более внятной.
все значения всех свойств в правой части (после =) - корректные. вычисленный результат всего выражения - тоже корректный. не отрицательный. не слишком большой и т.п. проверено в отладчике, в окне Watches.
заказчик пьёт корвалол. я в непонятках. гугл упорствует.
из-за чего это может быть и как с этим бороться? пс. офис и винду на проблемном компьютере пока не переустанавливали - хочется обойтись малой кровью.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
1. Почему ActiveCell, а не Target? Так задумано? 2. Почему где-то Me, а где-то wsInv? Тоже задумано? Зачем тогда такая путаница? 3. ActiveCell.Width - wsInv.Shapes("here").Width - что дает в результате? 4. (ActiveCell.Width - wsInv.Shapes("here").Width) / 2 - что дает в результате? Если результат приплюсовать к ActiveCell.Left - что получается? 5. Пример сего безобразия есть возможность приложить?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
ActiveCell - потому что допускается выделять диапазоны, в т.ч. несвязные. Me и wsInv - мой каприз, каюсь не думаю, что это существенно. ActiveCell.Width - wsInv.Shapes("here").Width - разница ширин ячейки и автофигуры вся арифметика - для того, чтобы позиционировать автофигуру по центру активной ячейки.
с примером - проблема... файл, само собой, немаленький, а делать аналогичный пример - какой смысл? в основном-то код отрабатывает без проблем. Дима, если хочешь - могу отправить на почту.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
есть еще нюанс. лист защищён. с UserInterfaceOnly.
и, как сейчас выяснилось в переписке - если руками снять защиту листа, то и на проблемном компьютере ошибка перестает появляться. но если обратно включить защиту (макросом, с параметром UserInterfaceOnly) - снова появляется. но только на одном компьютере. на остальных без проблем работает и на защищенном листе.
ikki написал: ActiveCell.Width - wsInv.Shapes("here").Width - разница ширин ячейки и автофигуры
Если вставлять надо посередине ячейки - зачем тогда разницу проводить между шириной ячейки и автофигурой? Почему не половина ширины ячейки?
Да, вышли на почту. Достоверно сейчас не скажу, но может быть, что ширина фигур и ячеек по-разному исчисляется. И Width ячейки не будет равна Width фигуры при равном визуальном соответствии.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
У меня работает без проблем(не считая того, что пришлось подкорректировать GettickCount под 64-бита). Не пробовал при защите установить: DrawingObjects:=False ?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
да не хотелось бы... разве только в порядке эксперимента? а иначе юзеры смогут выделять кнопочки (правой кнопкой, но всё же...) и издеваться над ними всяко-разно
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
The Vba Run Time Error 80070057 error may be caused by windows system files damage. The corrupted system files entries can be a real threat to the well being of your computer. There can be many events which may have resulted in the system files errors. An incomplete installation, an incomplete uninstall, improper deletion of applications or hardware. It can also be caused if your computer is recovered from a virus or adware/spyware attack or by an improper shutdown of the computer. All the above actives may result in the deletion or corruption of the entries in the windows system files. This corrupted system file will lead to the missing and wrongly linked information and files needed for the proper working of the application.
гуглоперевод:
Скрытый текст
Цитата
Время Vba Выполнить Ошибка 80070057 Ошибка может быть вызвана система файлов Windows повреждения. Записи поврежденные системные файлы могут быть реальной угрозой для благополучия вашего компьютера. Там может быть много событий, которые, возможно, привели к ошибкам системные файлы.Неполная установка, неполное удаление, неправильное удаление приложений или аппаратного обеспечения. Она также может быть вызвано, если ваш компьютер восстанавливается от вируса или рекламного / шпионских атак или ненадлежащего завершения работы компьютера. Все вышеперечисленные активы может привести к удалению или повреждению записей в окна системных файлов. Это поврежденную файловую систему приведет к пропавшей и ошибочно связаны информации и файлов, необходимых для правильной работы приложения.
кто-нибудь, владеющий английским, может "причесать" эту красоту?
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Вообще это имеет мало отношения именно к текущему случаю. Ведь без защиты листа все работает. Единственный момент - что будет, если отключить антивирус или добавить файлы Excel в доверенные? Потому как UserInterface вроде как идет в обход защиты листа, что может расцениваться антивирусом как попытка исполнения вредоносного кода.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
ikki, сие послание, на моё не самое лучшее знание языка означает примерно следующее:
Скрытый текст
Цитата
Ошибка Vba Run Time Error 80070057 может быть вызвана повреждением системного файла операционки. Дефектный системный файл может быть эм... большим геморроем для вашего компьютера! Причин может быть много: неправильная инсталляция, недозавершенная деинсталляция, неправильное удаление приложения или "железа". Также причиной может быть восстановление после вирусной/шпионской атаки, или некорректного завершения работы. Все вышеперечисленные причины могут быть вызваны удалением или взломом (?) системного файла операционки. Этот поврежденный файл может стать причиной потери или неверной ссылки на информацию и неверной работы приложения.
как-то так (не зная специфической компьютерной лексики и тонкостей её перевода)
Скрытый текст
Цитата
VbaRunTimeError 80070057 errorможет быть вызвана повреждением системных файлов Windows. Эти поврежденные системные файлы могут быть реальной угрозой для благополучия вашего компьютера. Есть много событий, которые могут привести к ошибкам системных файлов. Неполная установка, неполное удаление, неправильное удаление приложений или аппаратного обеспечения. Также к этому (этим ошибкам в системных файлах) может привести лечение вашего компьютера от вирусов или рекламных / шпионских атак или ненадлежащее завершение работы компьютера. Все вышеперечисленные действия могут привести к удалению или повреждению записей системных файлов в Windows. Этот поврежденный системный файл приведет к отсутствию и ошибочному связыванию информации и файлов необходимых для правильной работы приложения.
p.s. вечно опаздываю пока думаю об оформлении...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Скорее всего Excel здесь не причем, просто пользователь (у которого этот глюк) использует "устаревшее" обновление безопасности, механизм которого иcпользует Excel. Либо там реальный вирус. ИМХО следует включить антивирус на "максимум эвристики" во время выполнения кода и установить обновления Windows и Office, но только полезные. В 90% случаев это помогает.
Добрый день. Не подскажите, чем закончилось? Вылезла та же проблема - ошибка "Указанное значение выходит за допустимые пределы" на защищенном листе при попытке внести в Shape новый текст. Только дома, на Excel 2013 выдает ошибку. На работе, на Excel 2010 / Excel 365 даже под пользовательскими правами работает.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.