Привет, народ! Давненько я на Планете не появлялся. Всё не до программирования было, да и на Андроид подсел.
А тут понадобилось обеспечить передачу небольших текстовых массивов (несколько десятков элементов) для заполнения ListBox между разными приложениями.
Использовать создание/удаление текстового файла, а уж тем более использование именованного диапазона памяти на компе для такой простой задачи мне показалось избыточным. Вот я на переменные окружения и посмотрел.
Стандартная функция Environ для этой цели не подходит, т.к. только читает переменные окружения, да и то далеко не все.
А вот в CreateObject("WScript.Shell").Environment("USER") можно как добавлять собственные, так и удалять не нужные переменные. (Переменные типов "SYSTEM", "VOLATILE","PROCESS" доступны только для чтения).
По ходу дела для сравнения переменных, доступных через Environ и Environment написал две процедурки, создающие в текущей книге листы со списками переменных окружения и их значениями
Если возникнет ошибка при обращении к функции листа ТРАНСП (у некоторых это бывает), то можно использовать и чуть более сложный вариант с обработкой массива циклом:
Ну а теперь о возникшей странной проблеме при использовании Environment("USER").
Передача стрингов через них получается не сложно и устойчиво работает. Вот только удивляют большие задержки при создании переменной и её последующем удалении.
Стал анализировать. При счёте времени по Timer получил не только не повторяющиеся, но и вообще странные результаты. Мало того, что длительность процедур сильно плавает от теста к тесту, но при чтении она каким-то образом вообще иногда получается отрицательной!
Для проверки прицепил ещё и счёт времени через API
Длительности процессов, полученных через Timer и GetTickCount получаются разные! Отрицательных значений GetTickCount, правда не даёт, но и нулевые как-то напрягают.
Вот код, который я использовал для проверки длительности:
А вот такие хитрые результаты этот тест выдаёт в окне Immediate
Ничего не понимаю!
Неделю назад в Миру создал топик для обсуждения данного вопроса.
Но что-то никто из знатоков этот феномен так и не объяснил.
P.S. Файл с процедурами, к сожалению, с работы выложить не могу: собаки-сисадмины, маньяки, макросы из интранета наружу не выпускают.
А тут понадобилось обеспечить передачу небольших текстовых массивов (несколько десятков элементов) для заполнения ListBox между разными приложениями.
Использовать создание/удаление текстового файла, а уж тем более использование именованного диапазона памяти на компе для такой простой задачи мне показалось избыточным. Вот я на переменные окружения и посмотрел.
Стандартная функция Environ для этой цели не подходит, т.к. только читает переменные окружения, да и то далеко не все.
А вот в CreateObject("WScript.Shell").Environment("USER") можно как добавлять собственные, так и удалять не нужные переменные. (Переменные типов "SYSTEM", "VOLATILE","PROCESS" доступны только для чтения).
По ходу дела для сравнения переменных, доступных через Environ и Environment написал две процедурки, создающие в текущей книге листы со списками переменных окружения и их значениями
ENVIRION_Excel_Sheet | ||
|---|---|---|
|
ENVIROMENTS_Excel_Sheet | ||
|---|---|---|
|
ENVIROMENTS2_Excel_Sheet | ||
|---|---|---|
|
Передача стрингов через них получается не сложно и устойчиво работает. Вот только удивляют большие задержки при создании переменной и её последующем удалении.
Стал анализировать. При счёте времени по Timer получил не только не повторяющиеся, но и вообще странные результаты. Мало того, что длительность процедур сильно плавает от теста к тесту, но при чтении она каким-то образом вообще иногда получается отрицательной!
Для проверки прицепил ещё и счёт времени через API
Длительности процессов, полученных через Timer и GetTickCount получаются разные! Отрицательных значений GetTickCount, правда не даёт, но и нулевые как-то напрягают.
Вот код, который я использовал для проверки длительности:
test_ENVIROMENT_READ_WRITE | ||
|---|---|---|
|
Задержки создания-чтения-удаления переменной окружения | ||
|---|---|---|
|
Неделю назад в Миру создал топик для обсуждения данного вопроса.
Но что-то никто из знатоков этот феномен так и не объяснил.
P.S. Файл с процедурами, к сожалению, с работы выложить не могу: собаки-сисадмины, маньяки, макросы из интранета наружу не выпускают.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)