Сообщения

Google Apps Script - Ввод и вывод значений

Изображение
Ввод значений Из активной ячейки var cellValue = SpreadsheetApp.getActiveSpreadsheet() .getActiveSheet().getActiveCell().getValue(); Из диалоговой формы браузера var name = Browser.inputBox('Enter your name', Browser.Buttons.OK_ CANCEL); Debug & Messages Вывод и просмотр лога Logger.log(cellValue); Просмотр лога - меню "View" - "Logs" ("Вид" - "Журналы") Всплывающее окно в правом нижнем углу таблицы ( метод toast()  ). https://developers.google.com/apps-script/ reference/spreadsheet/spreadsheet#toast(String,String,Number) // Show a 3-second popup with the title "Status" and the message "Task started". SpreadsheetApp.getActiveSpreadsheet().toast('Task started', 'Status', 3); Окна браузера (Class Browser) https://developers.google.com/apps-script/reference/base/ browser // Class Browser   var name = Browser.msgBox('Task started', Browser.Buttons.Y

Google Apps Script - Полезные ресурсы в интернет

Изображение
Google Apps - заманчивая замена Microsoft Office. Мало того, что можно одновременно работать с одним документом, таблицей, презентацией, в нем можно создавать сложные приложения, свои функции и обработки, меню и панели инструментов. Google Apps Script - позволяет сделать потенциально все, что привычные по MS Office макросы.     VBA for MS Office становится не актуален, а для Office 365 он не работает (пока еще). Если надо - запускайте в оффлайн :) If you have the Excel desktop application, you can use it to work with macros. In Excel Online page, click  Open in Excel : https://social.technet.microsoft.com/Forums/office/en-US/7c46823c-2581-47a6-baac-66fb99ac3ea8/does-office-365-online-version-supports-vbavisual-basic-for-applications?forum=Office2016ITPro Полезные ресурсы по Google Apps Script Гид по Google Apps Script для начинающих  https://developers.google.com/apps-script/your_first_script Документация  https://developers.google.com/apps-script/ Дополнительные

"Самозаполнение" выпадающего списка

После того как в поле со списком "vidbir_zdiysneno" буде введено новое значение, проверяется существует ли такое значение в базе данных (в поле/таблице к которому прикреплен данный элемент управления). Если такого значения еще нет, то оно добавляеться в источник строк списка Private Sub vidbir_zdiysneno_AfterUpdate()     Call Req_source_vidbir_zdiysneno End Sub Private Sub Req_source_vidbir_zdiysneno() 'Заполняет поле со списком значениями из базы данных Dim rs As DAO.Recordset Dim sTemp As String Set rs = CurrentDb.OpenRecordset ("SELECT DISTINCT vidbir_zdiysneno FROM data_act_g") sTemp = "" With rs     If .RecordCount > 0 Then         Do While Not .EOF               If .Fields(0).Value <> "" Then sTemp = sTemp & Chr(34) & .Fields(0).Value & Chr(34) & ";"              .MoveNext         Loop         .Close     End If End With vidbir_zdiysneno.RowSource = sTemp End Sub

Как задавать метку даты времени, чтобы можно было проводть синхронизацию по ней?

Используем два поля "Ключ(Char)" и "Время(Date-time)" Возможные значения ключа: t - время - точные данные по времени n - минута - данные усредненные за минуту h - час - данные усредненные за час d - день - данные усредненные за день w - неделя - данные усредненные за неделю m - месяц - данные усредененные за месяц q - квартал - данные усредененные за квартал p - полугодие - данные усредененные за полугодие y - год - данные усредененные за год "Время" содержит дату-время события, в случае ключа усреднения - дату-время начала периода усреднения. Начало в случае усреднения по m, q, p, y (наиболее частые случаи) начинается всегда с первого дня месяца. Sub try() Dim d As Date d = CDate("01-01-2008 00:00:00") d = DateAdd("yyyy", 1, d) Debug.Print format(d, "dd-mmmm-yyyy hh:mm:ss") End Sub

Access 2007 RunTime : "Неопределенная функция Format в выражении"

Изображение
Больше часа искал из-за чего в Access 2007 RunTime приложение, которое нормально работает в Access 2007 (в котором оно и разрабатывалось) , выбивает сообщение : "Неопределенная функция Format в выражении!" и закрывается. В Access 2007 RunTime никаких способов продебажить код естественно нет - все закрыто. В общем, "ужасть" весьма злобная. Через какое-то время улавливаю, что ни одна из "стандартных" функций VBA типа Trim, InStr, Replace не работает. Это и навело на правильную мысль. Не понимаю почему, но в полном варианте Access все работает и без объявления этой библиотеки. Хотя, как показал опыт, это тоже не факт. Решение. Не стоит забывать в проектах Access объявить библиотеку Microsoft Scripting Runtime

Access 2007 RunTime : Разрешаем все "макросы"

Был вопрос: "Можно как-то отключить предупреждение Access-2007 ( RunTime ) на открытие приложения с небезопасным содержимым?" Ответ 1 : Изменить уровень безопасности легко. Достаточно пройти по ветке меню Сервис – Макрос – Безопасность… и установить Низкий уровень. Конечно, всё это просто, но объяснять всё это нескольким десяткам пользователей – язык отвалится. Наш пользователь привык читать инструкцию уже после того, как понажимает все возможные кнопки. Им почему-то проще позвонить в другой город, чем прочитать одну страничку текста (наверно, читать не умеют). Выход – менять уровень защиты программно. Уровень защиты прописан в реестре. Для Aссess 2003 - это ветка HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\security\Level А для Access 2007 – это ветка HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\VBAWarnings Размерность параметра – DWORD Значения уровня безопасности: 1 – низкий; 2 – средний; 3 – высокий. Ответ 2 : для Access 2007 Отключить преду

Как проверить существует ли объект в семействе?

У меня достаточно часто возникала ситуация, когда перед тем как обращаться к какому-либо объекту, надо было проверить - а существует ли он? Если такой объект отсутствует, то VBA возвращает ошибку: 3265 Item not found in this collection Элемент не обнаружен в данном семействе В общем возник закономерный вопрос: "Как лучше с этим разобраться?" Покажу решение на примере такой ситуации.  В Access надо временно создать некий запрос, который сохраняется в семействе CurrentDb.QueryDefs . Впоследствии этот запрос используется для некоторых действий, после чего его надо удалить. То есть код должен быть примерно такой: Set qd = CurrentDb.CreateQueryDef("zv_data") qd.SQL = "SELECT * , 'today is " & Now() & " '" FROM my_table;" '... используем запрос и производим "действия"... CurrentDb.QueryDefs.Delete "zv_data" Если в процессе работы возникнет какая-либо ошибка ( допустим, пользователь банально нажал ресет на