|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Блин сам файл не сцепился с первого разу. Исправляю. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 13:51 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studierenБлин сам файл не сцепился с первого разу. Исправляю. :)А ведь и вправду - юбилей ( клац ) 10 лет - круглая дата ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 14:40 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
адв, Честно говоря я не знал (собственно и не искал), что в форуме уже были темы о реестре "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]". Ну если Вы всё знаете может подскажите что нужно исправить в Win 7, чтобы и там можно было копировать любой текст из VBA? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 15:25 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, под вин7 не работаю, только тестирую. Не подскажу, к сожалению, ибо не сталкивался с проблемой. зы. А где я писал, что всё знаю? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 15:35 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Есть у контролов (textbox, combobox) форм свойство "KeyboardLanguage" (Язык клавиатуры). Если поставить там "English", то при получении фокуса данным контролом язык клавиатуры сразу переходит на английский. Штука очень полезная, но вот беда! Совсем не работает в табличной форме. Выкрутился так: В свойство "OnGotFocus" (Получение фокуса) написал: Код: vbnet 1.
Здесь 67699721 так сказать "InputLocaleID" для английского языка, если верить вот этой статье . Ну а для русского языка - 68748313. Допустим мы не знаем этот код для других языков. Как же узнать? Всё очень и очень просто. Сначала вручную сами переводим язык клавиатура на нужный язык и после этого в окне отладки пишем так: Код: vbnet 1. 2.
После чего и получим нужный код "InputLocaleID". P.S. А в табличных формах есть ли другой способ перевода языка клавиатуры? Только вот Win API не самое лучшее решение, т.к. в зависимости от 32- или 64-разрядной ОС код может сработать, а может и нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2013, 14:51 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren..., т.к. в зависимости от 32- или 64-разрядной ОС код может сработать, а может и нет. дико сорю нам посчатливилось досталось -- 'безвременье' рицепт - - ждать....) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2013, 14:59 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Как-то я уже спрашивал вот здесь 11371576 вопрос, который звучит примерно так: Если у формы источником записей служит таблица, линкованная через ODBC в SQL Server, то как можно поймать текст сообщения об ошибке именно сервера? P.S. Версия: А2003, формат: mdb. Нашёл по теме вот такую статью ACC2000: Cannot Trap Specific ODBC Errors on OnOpen Property of a Form Там как раз таки написано о причине данной проблемы: ODBC error messages normally consist of two components. The first component is error 3146, whose description is: ODBC--Call failed The server-specific error information is contained in the second component, from which you can retrieve an error number and a description such as: [Microsoft][ODBC SQL Server Driver][SQL Server] <Server-specific error message> (#<error number>) Ну и совсем слегка переделал тот код и у меня получился следующее: Код: vbnet 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2013, 10:52 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Весь код, который я "спрятал" под спойлер нужно держать в отдельном модуле. Ну а в форме на событие BeforeUpdate пишем так: Код: vbnet 1. 2. 3.
или в свойство "До обновления" пишем так: =BeforeUpdateOfForm([Form]) Вопрос: А нет ли каких-либо подвох в этом коде? Ну я имею ввиду нет ли там косяков и не будет ли где-то поджидать "сюрприз"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2013, 10:57 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Интересный факт я обнаружил. Если мы переменную величину объявляем как Integer, Date и т.д., то переменная ведёт себя также соответственно как Integer, Date и т.д., но некоим образом не как Variant. По идее всё так. Но! Бывает оказывается и исключение! :) Если в модуле объявляем переменную как Private или через Dim, то тут происходит нечто необычное. Код: vbnet 1. 2.
Теперь если в окне отладки просто запустить вот такой код, то MsgBox как не странно будет пустым. Код: vbnet 1. 2.
Если же проверить их на IsEmpty, то тут выясняется что IsEmpty(I) = True. Вот если этих же переменных объявить как Public, то уже MsgBox не пустой. Что это даёт в таком случае? Бывает иногда полезным узнать программным путём "использована" ли переменная (т.е. задавали ли мы хоть какое-либо значение). Если тип Variant, то достаточно было просто проверить IsEmpty, а вот с другими типами IsEmpty всегда возвращал False. Оказывается бывает и исключение. :) P.S. Сильно извиняюсь если баян. Из-за лени не стал искать в нашем форуме или в гугле, а сразу здесь же опубликовал. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2013, 13:23 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Странно! Если я в окне отладки пытаюсь передать строковую значению, то почему-то у меня VBA не ругается. Код: vbnet 1.
Как так? Значит если мы объявляем переменную как Private или Dim, то уже не имеет значение какой у него тип, всё равно будет как Varinant? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2013, 13:35 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Даже если у вас в модуле написано "option explicit", то для окна "immediate" это свойство не установлено. Возможно, что только по умолчанию, и где-то можно переключить, не важно. Так вот, если переменная на момент попытки её использования еще ни разу не была использована (читай, инициализирована), то создаётся новая переменная уровня окна immediate с типом variant. Со всеми вытекающими. В общем-то, предсказуемое поведение ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2013, 13:54 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Т.е. если переменные выше уровнем не удалось найти в памяти, то происходит примерно следующее: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2013, 13:57 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
ййййй, Упппс! Привык куски своих кодов проверять в окне отладки. Как-то не подумал, что окно отладки не видит эти переменные. :) Случайно "наткнулся" при проверке очередного своего кода и не разобрался. Первом делом подумал, что это такая особенность VBA. :) Реально sorry! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2013, 14:29 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Создал нижеследующий простейший код (Property) в MS Access и в MS Excel / Word: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если запускаю вот такой код в окне отладки MS Access, то ошибки не возникает и программа возвращает значение, а вот в Excel / Word ругается: Код: vbnet 1. 2.
Run по разному работает в разных продуктах офиса? P.S. Мне нужно было передать значение какой-либо переменной БД, находясь извне (т.е. в чужой среде) и потом в MS Access прочесть это значение. Конечно можно просто сохранить это значение в какой-либо таблице и в MS Access прочесть это. Но хотелось бы избежать создание лишних таблиц. Во время эксперимента и выяснил, что Run по разному работает в разных офисных продуктах. В связи с чем ещё 1 вопрос: как народ поступает в таких случаях? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2013, 11:59 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Условное форматирование Access 2010 Условное форматирование в акцесс 2003 было ограничено тремя вариантами Как вы, наверное, уже знаете, в 2010 акцессе это ограничение было убрано (причём, довольно коряво). Это выражается в том, что через удобный интерфейс можно добавить хоть 100500 вариантов условного форматирования для поля. Лично я, когда проверял, остановился на 25 вариантах... Но, если вы попытаетесь считать или добавить условные форматирования посредством VBA, вам будут доступны только первые три варианта. Попытка обратиться к остальным вызовет ошибку. Ковыряясь во внутренностях контрола, в наборе Properties я обнаружил 2 свойства: № 128 - ConditionFormat № 129 - ConditionFormat14 Оба эти Properties-а имеют формат битового поля. Только в первом случае свойство хранит информацию о первых трёх уровнях форматирования, а во втором случае - массив данных о всех условных форматированиях, которые можно присвоить контролу. Для набора из пяти свойств, данные могут выглядеть так: Массив данных в Hex Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Если этот массив данных присвоить какому-нибудь элементу в соответствующее свойство, то этот элемент станет обладать соответствующим набором условных форматирований. Так же можно передавать набор форматирований от одного контрола - другому: Код: vbnet 1.
Может, кому пригодится... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 16:12 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Bryk_Alien Условное форматирование Access 2010 Это бы в Недокументированные фичи http://www.sql.ru/forum/47491 и в Баги http://www.sql.ru/forum/85650 ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 16:18 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Есть топик Саныча «Узнать программно, послан ли отчет на принтер или на предпросмотр?» . Там есть решение, суть которого – повесить на событие Format заголовка отчёта примерно вот такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Когда отравляем на печать отчёта «DoCmd.OpenReport» вызывает ошибку. Как это работает не совсем понятно. Всё бы ничего, но только у меня возникла проблема. Есть у меня одна база данных, где «DoCmd.OpenReport» не возвращает ошибку, даже если с режима предварительного просмотра отчёт отправляем на печать. Вроде бы файл не испорчен, попробовал импортировать в новую базу, да и попробовал удалить все модули и воссоздать заново их (у Joss есть специальная программка, которая так и делает). Короче ничего не помогло, после чего попробовал пойти другим путём. На печать мы можем отправить двумя способами: 1) сначала открыв отчёт в режиме предварительного просмотра и затем нажимая на Ctrl+P. 2) сразу отправляем на печать. Код: vbnet 1.
Случай № 1. Если открываем отчёт в режиме предварительного просмотра, то в заголовке отчёта 1 раз происходит событие «Format» и если отправляем этот же отчёт на печать, то и данное событие совершается уже 2-раз. Стало быть, если установим глобальный счётчик внутри модуля отчёта или какую-нибудь метку, то при совершении повторного события будем знать, что отчёт отправлен на печать. Причём, даже если отчёт отправлен на печать не полностью, а только некоторые страницы (не обязательно начиная с первой стр.), то всё равно повторно происходит событие «ReportHeader_Format». Итак, повторное совершение события «ReportHeader_Format» информирует нас об отправке на печать отчёта. Случай № 2. При открытии отчёта в режиме предварительного просмотра совершается событие «Activate», а при отправке на печать без предварительного просмотра это событие не происходит вовсе. В общем-то, логично! Стало быть, на момент «Activate» ставим метку о том, что отчёт активирован и на момент закрытия отчёта «Close» смотрим, не был ли отчёт активирован. Если отчёт был активирован, то ничего не делаем внутри события «Close». А если всё таки активации не произошло, то тогда смотрим, не был ли заголовок отчёта отформатирован хотя бы раз. Если не был, то это означает, что отчёт не открыт вовсе (ну например, из-за отсутствия данных после фильтра). А если был, то отчёт отправлен на печать без предварительного просмотра. Вот и код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
P.S. А не прозевал ли я какую-нибудь подвоху? В смысле бывают ли случаи, когда этот код не работает? У кого какие мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2014, 15:50 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, капельку подправил ваш код, а то событие срабатывало даже в момент предпросмотра (на радость всё работает даже при "поднятии" экземпляра класса отчета :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2014, 17:18 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, А вот так уже не работает :( ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 11:45 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, поправил, теперь и в последнем случае всё нормально отрабатывает (да, всёж ФАК иногда перечитывать надо .... )))))) чешу "репу")))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 16:23 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Если подключить в референсах VBA " C:\WINDOWS\system32\scrrun.dll " (у меня Win XP, в других версиях возможно месторасположение файла чуть-чуть другое), то в списке библиотек появится " Microsoft Scripting Runtime ". Теперь нажимаю F2 и в " Object Browser " выбираю библиотеку " Scripting ". Выбираю из списка любую интересующую меня функцию и нажимаю F1, чтобы прочесть справочный материал. Всё время у меня выходило пустое окно. Есть один замечательный топик "Программно получить список классов и всех членов этого класса из библиотеки в References" , где есть код, с помощью которого можно получить много интересных свойств библиотек. Например, " MetodHelp ". Так вот, попробовал я и этот файл " C:\WINDOWS\system32\scrrun.dll " анализировать, так у него оказывается свойство " MetodHelp " = " C:\WINDOWS\system32\VBENLR98.CHM ". Смотрю я в свой компьютер и не нахожу этот файл. Поэтому и у меня пустое окно. Нашёл в и-нете вот здесь этот файл и поместил в папку " C:\WINDOWS\system32 ". Пустое окно исчезло, то вместо него компьютер начал ругаться. Как я понял из "ругани" компа, видимо этот файл был изначально предназначен для Windows 98, а у меня Windows XP. В инете нашёл вот такой топик Associate a help file with a library in the VBA object brower . Как я понял из данного топика файл был переименован " VBLR6.CHM " и находится совсем в другом месте (в моём случае вот здесь " C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\1033\VBLR6.CHM "). Скопировал я этот файл и разместил копию в папке " C:\WINDOWS\system32 ", да и переименовал как " VBENLR98.CHM ". И О ЧУДО!!!!! Программа совершенно перестала ругаться и самое главное начала открывать нужный справочный материал. P.S. Сколько же библиотек якобы "без справочного материала"? Microsoft видимо много раз переименовал и переместил в разные папки, да так, что приходится искать очень долго, чтобы найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 14:06 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Вывод: Если вместо справочного материала получаем пустое окно, то предварительно с помощью нижеуказанной функции узнаём полное название и местоположение справочного файла. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
P.S. Чтобы функция заработала, разумеется, нужно заранее зарегистрировать файл tlbinf32.dll . После этого ищем этот файл в нужной папке. Если нет его там, то находим и размещаем туда. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 14:34 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Дано: А2003, Win XP. Есть такой тип данных "date" в SQL Server (если не ошибаюсь начиная с версией 2005 появился этот тип данных). Когда линкую таблицу, то Access воспринимает этот тип как текст, а не дата. Причина как оказывается в драйвере. Если использовать драйвер "SQL Server", то так и происходит. Ну а если использовать более "свежий" драйвер "SQL Server Native Client 10.0", вот там "date" как дата. Ну и другие типы данных вроде бы читаются без проблем. (Недавно был топик, где об этом и было написано). Вот только одна проблема. Если тип данных "varchar( Max )", то этот драйвер теперь совсем "плохо читает" (почему-то не показывает первые 255 символов). Сталкивался ли кто-либо с такой проблемой? Может в строке подключения что-то надо "подкрутить"? Экспериментирую с различными строками подключения, пока безрезультатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 10:23 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, получить строку значений столбца запроса (сконкатенировать столбец) можно , подключив библиотеку Excel и использовав функцию Transpose из этой библиотеки , тогда эту операцию можно записать одной строкой Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 09:53 |
|
|
start [/forum/moderation_log.php?user_name=WhiteTiger]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 455ms |
0 / 0 |