Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2, средняя оценка - 5.00
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
#1

Профессиональные проблемы, решения, рекомендации и ошибки - VBA

28.02.2013, 10:21. Просмотров 55900. Ответов 115
Метки нет (Все метки)

Уважаемые коллеги.

На форуме появляюсь редко и заниматься этим нет возможности ... но очевидно, что для тех кто профессионально работает с VBA, наверное было бы интересно иметь в топе тему, в которой можно было бы описывать глубоко профессиональные проблемы, решения, рекомендации и ошибки VBA.
Так сказать - скоп очень интересных и необычных проблем.
Да, это профессиональный опыт, но он позволит повышать квалификацию всем нам гораздо быстрее, а не только после возникновения той или иной очередной проблемы ...

к примеру, несколько советов:
*
Если вам необходимо открыть-скрыть много строк и столбцов. Если хотите, чтобы это работало быстро - необходимо создать список диапазонов и потом через Range (EntireColumn) задать свойству Hidden нужное значение. Все просто ... но не всегда. Если у вас диапазон большой (не могу сказать с какого количества символов) - использование Range может не работать.
т.е.
Visual Basic
1
2
3
4
5
6
Range(dСкрываемыйДиапазонСтрок).EntireRow.Hidden = True '- работает не всегда 
[dСкрываемыйДиапазонСтрок].EntireRow.Hidden = True '- работает всегда (просто используем другую нотацию) 
', где 
Dim dСкрываемыйДиапазонСтолбцов As Range 
'в цикле:
Set dСкрываемыйДиапазонСтолбцов = Union(dСкрываемыйДиапазонСтолбцов, Cells(i1&, i2&).EntireColumn)
(см. ниже комментарий по данной теме : Профессиональные проблемы, решения, рекомендации и ошибки)

*
Если вы открываете какой-то файл и он не открывается т.к. выдает "Файл используется ... и занят пользователем User ...", а в действительности он никем не занят, то может помочь следующее:
- отложите мышку в сторону и выбрав файл нажмите ЕНТЕР! все откроется. - баг при открытии файла мышкой, который устраняется клавишей ЭНТЕР с клавиатуры ... не известно почему, но часто работает. и не потому, что он освободился, а потому, что он действительно никем не занят!) (комментарий спустя пару лет - как выяснилось, это поведение характерно для организаций(компаний) использующих новелл)
*
Бывает так, что вы долго и нудно отлаживаете программу, которая с завидной частотой падает и вылетает. Тем более, если у вас в книге полно диалоговых элементов.
... а потом, в какой-то момент, вы понимаете, что сама программа долго загружается, неоправданно меделенно работает и место на основном диске куда-то пропало.

беда в том, что эксель при каждой загрузке вашего файла, под каждую кнопочку, чек-букс, лист и ... - создает в тем-каталоге вашего профиля отдельный .emf - файл
[диск размещения профиля]:\Documents and Settings\[ваша учетка]\Local Settings\Temporary Internet Files\Content.MSO
и каждый раз, после падения - все эти файлы остаются, копятся, не убиваются и никем и ни чем не расцениваются как ненужные ... количество их может доходить и до 2 тыс. и до 40 тыс. ... и больше

для этого закрываем все эксели, любим Far, заходим в каталог и удаляем с Shift - бысто, нежно и надежно )
*
В случае если необходим доступ к листу в другой книге и метод Workbook1.Worksheets("Имя листа") не работает (возможно из-за защит, блокировок, скрытий), можно воспользоваться следующим способом:

Visual Basic
1
2
3
For i& = 1 To Workbook1.Worksheets.Count 
   If Workbook1.Worksheets.Item(i&).Name = "Имя листа" Then Set WorksheetToFind = Workbook1.Worksheets.Item(i&) 
Next i&
после чего, обращаемся не к Workbook1.Worksheets("Имя листа"), а к WorksheetToFind
*
(описанная проблема возникает редко)
если у вас есть variant массив (который к примеру можно сделать путем split'а), а в передаваемой вам функции стоит ParamArray dПринимаемыйМассив()
то, не удивляйтесь, если вместо передаваемых строковых значений в передаваемых элементах изначального массива, вы получите на выходе в ParamArray dПринимаемыйМассив() числовые данные )))
т.е. например:
Visual Basic
1
2
3
4
5
a="Маша ела сушку" 
aa=split(a," ") 
call fФункция(aa(0),aa(1),aa(2)) 
 
private fuction fФункция(ParamArray dПринимаемыйМассив())
!!! - здесь, в элементах dПринимаемыйМассив вы получите числа а не строки!!! т.е. dПринимаемыйМассив(0) будет не чем иным как 5522334481275 (или что-то в этом роде)
видимо, трабла здесь в том, что при передаче элемента variant-массива в ParamArray, не передается признак типа переменной, что и приводит к тому, что строка (массив символов), видимый как байтовый массив, превращается в набор чисел, соответствующих символам этой строки (последовательности ascii-кодов)
end function

если хотите избежать проблем - в данном случае при вызове четко приводите к типу:
Visual Basic
1
call fФункция(cstr(aa(0)),cstr(aa(1)),cstr(aa(2)))
*
если вам надо заполнить выпадающими списками ячейки книги, то код типа:
Visual Basic
1
2
3
4
5
6
With .Cells(i3&, i1&).Validation 
            .Delete 
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="+;-;да;нет;qwe;asd" 
            .IgnoreBlank = True 
            .InCellDropdown = True 
end with
скорее всего позволит вам заполнить выпадающими списками любое количество ячеек. но! когда вы закроете книгу и потом ее откроете - заполненными там будут около 505-510 ячеек (не известно от чего зависит). при этом, ручное копирование ячеек с выпадающими списками (и дальнейшее закрытие и открытие книги() - дают ожидаемый результат - новые ячейки с нужными списками. т.е. программно вы заполняете только 505 ячеек, а вручную - любое количество.

если к указанному коду добавить
Visual Basic
1
2
3
4
5
6
            .InputTitle = "" 
            .ErrorTitle = "" 
            .InputMessage = "" 
            .ErrorMessage = "" 
            .ShowInput = True 
            .ShowError = True
то в книге программно заполняются все ячеки. при закрытии и открытии вновь - все выпадающие списки сохраняются.

... может это будет началом?
10
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 10:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Профессиональные проблемы, решения, рекомендации и ошибки (VBA):

Указать, почему программа останавливается на операторе Stop, найти пути решения проблемы - VBA
ВНИМАНИЕ! все что написано в данном сообщении - просьба прочитать внимательно! Коллеги, объявляется конкурс. (а если серьезно - понять...

Проблемы с алгоритмом решения задачи - C++
Нужно написать алгоритм решения задачи. Т.е. что и как делает прога, желательно построчно, ну или близко к этому. Собственно задача: ...

Прошу помощи решения проблемы в перекрестном... - MS Access
Ребята, прошу помощи. Есть перекрестный запрос: TRANSFORM Count(.TypObor) AS SELECT .LICS, Count(.TypObor) AS Всего FROM ...

USB устройство, проблемы и пути решения. - Носители информации
Народ, что делать с флешкой - сохраняю на ней файлы (форматы разные), после не могу их открыть, пишет что файлы созданы в других...

Каковы возможные решения проблемы рывков в эмуляторе? - Программирование Android
пишу игру, кадры перерисовываются в методе, который контролируется таймером. поставил 60 кадров. на телефоне все прекрастно, естественно....

BDE - ошибки и решения - Delphi БД
Доброго всем дня. Нужна помощь/совет. Есть программа на Delphi, исходников нету - не мной написана. Работает через BDE с базами Paradox...

115
Hugo121
5917 / 2080 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
28.02.2013, 12:35 #2
У меня на 2003 Маша сушку ест

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub tt()
    a = "Маша ела сушку"
    aa = Split(a) ', " ")
    Call fФункция(aa(0), aa(1), aa(2))
End Sub
 
Function fФункция(ParamArray arr())
    Dim i&
    For i = LBound(arr) To UBound(arr)
        MsgBox arr(i)
    Next
End Function
Может локальный глюк?
2
Казанский
13195 / 5086 / 1223
Регистрация: 24.09.2011
Сообщений: 7,861
28.02.2013, 12:53 #3
Цитата Сообщение от StepInLik Посмотреть сообщение
было бы интересно иметь в топе тему, в которой можно было бы описывать глубоко профессиональные проблемы, решения, рекомендации и ошибки VBA.
Так сказать - скоп очень интересных и необычных проблем
Дело хорошее. Но многие описанные Вами случаи относятся к ошибкам
Некоторые моменты:
Цитата Сообщение от StepInLik Посмотреть сообщение
Если вам необходимо открыть-скрыть много строк и столбцов...

Range(dСкрываемыйДиапазонСтрок).EntireRow.Hidden = True - работает не всегда
[dСкрываемыйДиапазонСтрок].EntireRow.Hidden = True - работает всегда (просто используем другую нотацию)
, где
Dim dСкрываемыйДиапазонСтолбцов As Range
Я вам больше скажу: если dСкрываемыйДиапазонСтрок имеет тип Range, то, чтобы выражение Range(dСкрываемыйДиапазонСтрок) вообще работало, первая ячейка диапазона должна содержать строку - адрес диапазона. А там, где "работает всегда" - квадратные скобки вообще не нужны.

Цитата Сообщение от StepInLik Посмотреть сообщение
если у вас есть variant массив (который к примеру можно сделать путем split'а)
Split возвращает массив типа String() - посмотрите в Locals.
И у меня тоже на 2000 Маша съела сушку без проблем

Добавлено через 9 минут
Цитата Сообщение от StepInLik Посмотреть сообщение
если вам надо заполнить выпадающими списками ячейки книги
Интересное наблюдение. Но вставлять условие валидации по одной ячейке нерационально - долго по времени, и файл получается большой. Например, я дописал к вашему коду циклы и вставил валидацию в 5000 ячеек - от cells(1,1) до cells(1000,5). Файл получился размером 413 кб. А если вставить валидацию сразу в range("A1:E1000") - размер файла 20 кб.
2
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
28.02.2013, 12:57  [ТС] #4
код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub tt()
    a = "Маша ела сушку"
    aa = Split(a, " ")
    Call fФункция(aa(0), aa(1), aa(2))
End Sub
 
Function fФункция(ParamArray arr())
    Dim i&
    For i = LBound(arr) To UBound(arr)
        MsgBox arr(i)
    Next
End Function
дает 108888888 или какие-то другие числа
вообщем-то, смысл моего поста был в том, чтобы продолжить тему, а не только разбирать ошибки ...
1
Казанский
13195 / 5086 / 1223
Регистрация: 24.09.2011
Сообщений: 7,861
28.02.2013, 13:09 #5
StepInLik, может, Вам Офис переустановить? В VBA и VB6 появляются сообщения "Маша", "ела", "сушку".
0
Hugo121
5917 / 2080 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
28.02.2013, 13:42 #6
Мне особо продолжить нечем (ничего такого сразу не вспомнилось), поэтому проверил то, что сразу показалось сомнительным.
У меня ошибки нет, у Вас есть - и это результат. Только причины непонятны...

Хотя кое-что вспомнилось - есть глюк с кодовыми "умолчательными" именами листов в Экселе. Не советую их использовать в коде - на машине на "иначеговорящем" Экселе может быть сюрприз. Если используете - вручную смените сперва кодовое имя этим листам.
Ну и как-то столкнулся при сравнении двух совершенно одинаковых (всюду, и в окне Locals тоже) значений двух ячеек, что они не равны.
Обсуждение было большое и долгое - суть такова: если данным можно доверять, то такого быть не должно. Если данные доверия не вызывают - нужно преобразовывать тип, приводить их сперва принудительно к одному типу, затем сравнивать.
3
Hugo121
5917 / 2080 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
28.02.2013, 14:19 #7
Сваял скрин - не фотошоп!
Эксельку дать не могу - да тут и на скрине всё видно.
1
Миниатюры
Профессиональные проблемы, решения, рекомендации и ошибки  
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
01.03.2013, 11:58  [ТС] #8
Про "Машу" тоже наваял скрин.
Данной трабле уже много лет. Проверено на многих компах и уже не в первой конторе.
0
Миниатюры
Профессиональные проблемы, решения, рекомендации и ошибки  
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
01.03.2013, 12:48  [ТС] #9
С замечаниями г-на "Казанский" согласен.
- в примере с dСкрываемыйДиапазонСтрок что-то было напутано при документации
однако, ошибка следующего кода все равно остается:
Visual Basic
1
2
3
4
5
6
7
Private Function qwe() 
 For i1& = 1 To 100 
  dДиапазон$ = dДиапазон$ & IIf(Len(dДиапазон$) <> 0, ",", Empty) & Replace(Columns(i1&).Address, "$", Empty)
  Next i1& 
  
 Range(dДиапазон$).EntireColumn.Hidden = True 
End Function
В примере с "Машей", typename дает string, однако, какой бы он string не был - пока прямого приведения не будет. Ошибка остается.

В примере с проверками данных("Данные\Проверка данных" ячеек) так же согласен - опционально указывать проверки по диапазонам, однако, в указанном примере так же попытался показать проблему, с которой могут столкнуться другие разработчики (в других задачах). Ошибка остается.

*(если кто-то знает официальные ограничения на следующий пример - скиньте ссылку)
Если на листе Excel Вы создаете OptionButton с очень длинным название, к примеру: OptionButton_ОченьДлинноеНазваниеЭтогоДиалоговогоЭлемента_НеДелайтеЕгоДлинным
то при закрытии файла и его повторном открытии - имя OptionButton будет прежним = OptionButton1
0
Миниатюры
Профессиональные проблемы, решения, рекомендации и ошибки  
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
01.03.2013, 16:04  [ТС] #10
*
кажется все давно знают, но решил задокументировать.
если вы заполняете лист-букс при выключенном ScreenUpdate, то после его включения, 2007 и 2010 эксели все показывают - отражается новый(обновленный) список и все замечательно. но! если вы это делаете в 2003 - ничего не выйдет - эксель не отобразит изменения области лист-букса.
пробовал вариант в 2003 - включать ScreenUpdate перед последними изменениями лист-букса(перед внесением последней строки) - все равно ничего не отражает.
для отражения, надо чтобы пользователь попереключался между приложениями (сработало системное событие полной отрисовки этого лист-букса)

кто как боролся с этим?

*
если вы используете механизмы переноса листов из одной книги в другую и!!! у вас на листах есть элементы управления (кнопки, листбуксы, ...) - никогда не давайте им длинные имена. не могу сказать с какой длины, но однозначно! и не всегда сразу!, но объекты при переносе начинают терять имена (или возвращаться к каким-то старым)!
т.е. к примеру, вы создали кнопку, по умолчанию у нее "CommandButtom1". первое имя, которое вы ей дали - "CommandButtom_Управление". потом, долгие месяцы кодинга и переносов листа с этой кнопкой и ... вам в голову приходит мысль переименовать ее ... и ее новое имя "CommandButtom_УправлениеСлужбойДиспечеризацииИСистемы" - сохраняете книгу, открываете, работаете с кнопкой по этому имени, в свойствах именно это имя ... но иногда, в результате очередного(не всегда первого) копирования листа с этой кнопкой в новую книгу, может оказаться, что ваша кнопка стала "CommandButtom_Управление" или вааабще "CommandButtom1" (или какие-то из ранее данных ей имен) ...

*
если у вас есть один лист (модуль) и есть второй, на котором у вас TreeView, то при программном переносе листа из 2го модуля в 1ый в 2007 и 2010 - объект TreeView превращается в объект пикчур. в 2003 же - все работает, правда, его размеры сбрасываются до default ... и даже когда конкретно указываешь и делаешь рефреш - на экране четкий "изначальный" квадрат ... и нужно, чтобы юзер прокрутил скрол или попереключался в приложениями

*
VBE.
- "МОЙ ФАЙЛ" открывает файл "ХХХ"
- (без остановки интерпритатора) в "ХХХ" отрабатывает автозагрузки и макрос пробегает по модулям а1 и а2
- (без остановки интерпритатора) в "МОЙ ФАЙЛ" пытаюсь удалить эти модули! - не получается! (остальные удаляются без проблем)
и ... они продолжают висеть пока интерпритатор не остановится!
но как только он встал - модули мгновенно исчезают! т.е. ранее при попытке удаления они встают в очередь на удаление.

плохо то, что если не удалив модуль а1 попробую импортнуть этот же модуль из файла - он станет а11 (с автоматическим добавлением индекса в конце имени) и как только интепритоатор остановится - у вас в оснастке будет только а11! и а1 - исчезнет!
а теперь представьте, что вместо модуля вы работаете с классом?! - в результате у вас будет нужный вам класс с ДРУГИМ именем!

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

Добавлено через 2 часа 53 минуты
*
Представьте такую связку:
- на чейндж листа вызывается макрос-обработчик
- (без остановки интерпритатора) в обработчике вызывается evaluate с вызовом вашей самописной функции AAA
- (без остановки интерпритатора) и ... вы хотели бы построчно отдебажить работу этой функции AAA при этом вызове
НО! какие-бы точки останова вы не ставили - интерпритатор не остановиться, а просто тупо пролетит и выполнит всю функцию не дав никакой возможности ее остановить(F9) и отдебажить!
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
04.03.2013, 17:23  [ТС] #11
Если вы своем приложении (Excel, VBA) открываете файл, который при этом выдает на гора окно с диалогом (типа окна с паролем) или какой-то "кнопкой", то управление вы этим файлом не плучите до тех пор пока пользователь не нажмет на нужную "кнопку"(и не закроет это окно) ... ... мда ... правильно - API в помощь ... вешаем в коде таймер и на него нажималку на эту "кнопку" (не забываем использовать Spy ++)
Все бы здорово, да вот только таймер, в тот момент как вы вызвали
Call dОбъектApplication.Workbooks.Open(dПутьИсходногоФайла$, True, True)
работать не будет т.к. интерпритатор занят задачей открытия файла (реализация многопотоковости в Excel'е - гиблое дело!) ...
и так будет в любой ситуации, когда в вашем коде работает таймер, а интерпритатор уходит в себя на работу с внешним объектом (при этом, переставая обслуживать таймер)
- пишите специальное приложение на нажатия кнопок и снятия экранных форм отдельно ... запускайте его до и закрывайте после решения вашей задачи ...
может этот совет кому-то сэкономит время )
0
Hugo121
5917 / 2080 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
04.03.2013, 18:20 #12
Сам не писал, но видел (и даже чуть правил) - при запуске файла открывалась форма, которая по таймеру (Application.OnTime) благополучно закрывалась.
Добавил отключение этого дела, если форму и файл закрывали раньше этого времени
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
05.03.2013, 11:19  [ТС] #13
Уважаемый г-н "Hugo121", честно сказать не совсем понимаю смысл данного примера.
Речь шла о занятости интерпритатора работой с внешним процессом (приложением), в то время, когда надо закрыть ряд окон во внешнем приложении. (т.е. в момент когда интерпретатор занят открытием файла(и курсор выполнения висит в этой функции) - должна отработать еще и другая(какая-то) функция)
Ключевой момент если открываемый вами фал написан другим разработчиком, с закрытым кодом и который нельзя изменять. Причем написан так, как из анекдота "мда ... проверял?! ну пусть встает дальше - пока работает ...".
И здесь приходится закрывать его со стороны.

*
Кстати, интересный факт.
Если повесить на какую-то функцию виндовый таймер, то работа этой функции не прекратится даже в тот момент, когда вы находитесь в режиме конструктора (с нажатой кнопкой конструктора!). И это логично - ведь винда не знает в каком режиме вы работаете с программой и она тупо продолжает вызывать отданную ей функцию (пока вы не снимите с этой функции таймер).
Другой вопрос, что редактировать эту функцию либо нельзя совсем т.к. возникнет ошибка и приложение мгновенно вылетит(из процессов), т.е. ее редактирование возможно только в периоды между ее вызовами). Причем, функция либо должна сверху содержать resume next (в случае ошибки) или не содержать ошибок вовсе.
(комментарий спустя пару лет - с момента данного комментария, разработчики исправили данную проблему. поэтому, вероятнее всего, что вы не столкнетесь с этим. однако, если трабл возник - не удивляйтесь и просто обновите офис)
На этом эффекте можно построить хорошую защиту приложения - каждые пол секунды проверять снятость паролей или работу с кодом (и как только обнаружен взлом - на ваш вкус - прибивать приложение, восстанавливать пароль и т.д. ...)
P.S. Учтите, что при повторном запуске и очередном навесе еще одного таймера на ту же функцию - она будет вызываться еще и еще чаще, поэтому не забывате таймер снимать.

*
Все знают про "компьютерную неточность".
Красивый пример, чтобы доказать пользователю, что у него кривой комп и вам надо больше времени на разработку (чтобы просто посидеть и потупить на хабре )))
и так, проделываем перед пользователем следующее: в A1 пишем 0,1 (чило), в A2 пишем "=A1+0,1" и протягиваем A2 этак ячеек на 300 ... потом копируем столбец A в B со вставкой значений и смотрим в B какую-нибудь нижнюю ячейку. и что выидим?! B266=26,6000000000001
Решается все это конечно просто - переключением в режим "Задать точность как на экране" ... но ... глюк остается глюком и им можно пользоваться )
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
05.03.2013, 12:45  [ТС] #14
Не знаю ... будет ли кому полезно и в принципе очевидно ... но ни разу не слышал о следующем функционале:
Представьте, что пользователь открывает файл и ждет, пока программа подгрузит какие-то данные к работе с какими-то листами (функционалом). Ожидание логично, но не всегда устраивает пользователя этого файла ... поэтому, можно сделать так, что сразу после открытия файла пользователь сразу приступает к работе с файлом (переключается между листами, что-то просматривает) ... а файл в это время грузит все, что ему нужно, часто и по максимому отдавая пользователю через DoEvents необходимые ресурсы (функцию загрузки данных просто вешаем на событие открытия книги) ...
И в случае, если пользователь переключился на лист с какими-то данными, которые должны быть загружены, но не успели загрузиться к моменту переключения:
- либо можно показывать "on loading ..." и экстренно загружать все что нужно с ожиданием пользователя (с дальнейшим обновлением листа)
- либо все так же постепенно (но уже с приоритетом загрузки данных этого листа) загружать данные и постепенно отражать и картинки и графики по ходу работы пользователя ...
(ну чем не BI ? )))
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 388
20.03.2013, 14:22  [ТС] #15
Если вы из программы в Excel открываете другой Application(назовем этот объект dApplication), и в нем обновляете средствами VBE код друой программы, то даже при включенном "доверии к объектной модели проектов VBA" - ваш код обновления может не сработать из-за "Application-defined or object-defined error" при обращении к dApplication.VBE
Чтобы проблема разрешилась - надо "сделать файл надежным" или настроить соответствующие "Надежные расположения".
Но! удивительно то, что получить доступ к dApplication.VBE все же можно! Нужно в аппликейшене(который вы запустили и в котором пытаетесь обновить код другой программы, т.е. - dApplication) просто перейти к коду посредством Alt+F11 ... - даже без включения надежности и настройки расположения!
Это наталкивает на мысль, что существует скрытый признак "доверия к коду", который по умолчанию включается как при настройке надежности файла, настройке расположения, так и попросту - при открытии(просмотре) кода.
0
20.03.2013, 14:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 14:22
Привет! Вот еще темы с ответами:

Реестровый триал(ошибки и решения) - Delphi
Привет, всем. Пишу свою программу. Ну и создал даже модуль триала через реестр, вот основа: unit RegTrial; interface uses Windows,...

Укажите ошибки и пути их решения - C (СИ)
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; int main(int argc, char* argv) { const n = 8; float m; ...

Какие проблемы Вы видите при решении данной задачи? Предложите алгоритм решения - Алгоритмы
Здравствуйте, помогите с заданием для зачета пожалуйта. Информация о том, сколько людей прописано, сколько отсутствует, сколько...

Найти способ решения проблемы - функция setPixel() работает очень медленно (SFML) - SFML
В sfml функция setPixel() работает очень медленно, можно-ли попиксельно редактировать изображение другим способом?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru