petrogeo писал(а):
...От як перевірити що зовнішня програма вже завершила свою роботу, і я можу продовжити виконання скрипту (тому що для подальшої роботи скрипту потрібні дані з Буфера)
А що, зовнішня програма лише для того, щоб відкрити файл Excel? Його ж можна відкрити функцією
@Run, вказавши замість файла зовнішньої програми, файл Excel.
Інша справа - очікування скрипта, поки запуститься Excel! Можна застосувати
функцію dll, яка чекає (максимум - протягом часу Param3 в мілісекундах)
поки вікно з класом Param1 та/або назвою Param2 відобразиться на екрані. Повертає 1 - якщо форма відобразилася на екрані протягом
Param3 мілісекунд, або 0 - якщо час закінчився а форми на екрані так і не було. Якщо
Param1 або
Param2 відсутній, то символ "/" повинний вказуватись, при цьому або Param1 або Param2 повинний вказуватись обов'язково.
Перед застосуванням функцій, файл
Functions.dll (від 12.12.20) треба закинути в теку Digitals і перезапустити програму.
Код:
@DLLExec Functions.WaitFormForClassAndCaptionActivated [Param1]/[Param2]/Param3
(клас головного вікна Excel - XLMAIN).
Далі - функція, яка
під'єднується до активної відкритої книги Excel і запускає процедуру VBA, записану в книзі. Вона чекає, поки виконається процедура.
Код:
@DLLExec Functions.ExecutProcVBA NameProc/Param
де
NameProc - назва процедури VBA, записаної в активній відкритій книзі Excel;
Param - аргумент процедури VBA. Якщо аргумента процедури немає, символ "/" однаково вказується.
Значення з нерозривного діапазону клітинок активного аркуша активної книги Excel, після виконання процедури VBA, можна в скрипті отримати як результат функції
GetValueRangeExcel Row,Coll,ShiftRow,ShiftColl,StrSepar[[,LastRow][,LastCol]] в якій квадратні дужки означають необов'язковість аргументу;
Row і
Coll - номер рядка і номер стовпчика лівої верхньої комірки діапазону аркуша;
ShiftRow і
ShiftCol - зміщення рядка донизу і зміщення стовпчика вправо до правої нижньої комірки діапазону;
StrSepar - один або декілька символів для розділення значень в рядку отримуваного масиву;
LastRow (Const) - ознака звузити діапазон до останнього заповненого рядка в першому стовпчику діапазону;
LastCol (Const) - ознака звузити діапазон до останнього заповненого стовпчика у першому рядку діапазону.
Приклад виклику зі скрипта:
Код:
$Str=@DLLExec Functions.GetValueRangeExcel 12,169,19,50, ,LastRow,LastCol
$CntText=@Text.Text $Str
petrogeo писал(а):
...Мені потрібно призупинити виконання скрипта, до того моменту поки зовнішня програма не скопіює дані в буфер (а це може бути від 1 рядка до 10 000 рядків в Exsel)
Інший варіант: знаючи клас форми вікна зовнішньої програми, після її виклику в скрипті застосувати функцію
@Wait 0 ClassName - очікування скрипта, поки вікно з класом форми
ClassName відображається на екрані. Клас форми вікна можна подивитись
цією програмою.
petrogeo писал(а):
Чи є можливість перевірити Буфер обміну (чи є в буфері значення) скриптовою функцією?
@Text.Paste з аналізом вмісту текстового блоку.
12.12.20 Додано функцію
OpenFileWithAsocProcAsinhron FullFileName, яка дозволяє
відкрити зі скрипта файл в програмі, асоційованій з розширенням файлу (
FullFileName - повна назва файла, включаючи шлях та розширення). Скрипт Digitals буде очікувати, поки запущена програма виконується. Функція повертає рядок: "1" - якщо програма для розширення файлу знайдена і мала би запуститися; "0" - якщо відповідної програми, в асоціації з роширенням файлу, не знайдено. Приклад виклику зі скрипта
Код:
$ProgFold=@ProgramFolder
;Повна назва файла, який необхідно відкрити
$Str=$ProgFold\Favorites\Площа за координатами.xls
$Rez=@DLLExec Functions.OpenFileWithAsocProcAsinhron $Str
@If $Rez=0 then @Break Не вдається запустити $Str||Відсутня асоціація програми з розширенням файлу.
@Dialog.Message Виконано $Str