Задать вопрос
@dmitriev_romka

Как устранить ошибку при запуске vbs файла Планировщиком заданий?

Запускаю vbs-файл через планировщик на windows 10. Vbs без планировщика открывает все отлично, открытие файла с его помощью выдает следующую ошибку:

Не удалось получить свойство "getScrollTop" ссылки, значение которой не определено или является NULL


Подскажите пожалуйста в чем ошибка, что ему не нравится и как это исправить?

Дополнительные сведения об ошибке сохранил в блокноте, не могу сюда прикрепить файл, при необходимости могу скинуть на почту

Макрос VBS:
Call Run_macros

	'запуск макроса'
Sub Run_macros()
	'запускаем Excel-процесс
set objExcel = CreateObject ("Excel.Application")
objExcel.Visible = true    
Op_writ="R:\ЭКСЕЛЬ\файл1"
objExcel.Workbooks.Open (Op_writ)
	'запуск макроса
objExcel.run "ОБН_данных"
	'сохранение файла
objExcel.Workbooks("файл1.xlsm").Save
	'по завершению закрываем документ. Пишем только имя файла, без пути
objExcel.Workbooks("файл1.xlsm").Close(false)
	'закрываем Excel-процесс
objExcel.Quit
end sub
  • Вопрос задан
  • 784 просмотра
Подписаться 3 Средний Комментировать
Решения вопроса 1
@Iv_and_S
В процессе переписки ( в соседнем ответе) и экспериментально выяснилось, что прочиной не корректной работы, был остававшийся в памяти "фантомный" процесс Excel который не завершался после выполнения скрипта. Потому ошибка и проявлялась со второго раза выполнения.

вероятной причиной того, что процесс оставался висеть, является в чем то не корректный скрипт.
По всей видимости в памяти остается какой то объект , который мешает завершиться Excel процессу корректно.
пути решения два:
1) пытаться таки сделать корректный скрипт. Это правильно, но заморочно.
последний вариант приложен , но он таки верно не заработал.
spoiler

Call Run_macros

Sub Run_macros()

    Dim objExcel
    Dim Op_writ
    Dim Wb
    
   'запускаем Excel-процесс
    Set objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = true    
    Op_writ="R:\инста\ЭКСЕЛЬ\АНАЛИЗ\НОВЫЙПОДПИСЧИКИ17"
    Set Wb = objExcel.Workbooks.Open (Op_writ)
   'запуск макроса
   objExcel.run "ОБН_данных"
   'сохранение файла
   objExcel.Workbooks("НОВЫЙПОДПИСЧИКИ17.xlsm").Save
   'по завершению закрываем документ. Пишем только имя файла, без пути
   objExcel.Workbooks("НОВЫЙПОДПИСЧИКИ17.xlsm").Close(false)
   'закрываем Excel-процесс
  objExcel.Quit
  Set objExcel = Nothing 
  Set Wb = Nothing
End Sub


2) скриптом "прибивать" процесс. просто, надежно, но эт как бы костыль. Хотя судя по интернетам, ряд людей столкнувшихся с этой проблемой, выбрали именно этот путь).

Ряд пояснений о проблеме, как сделать корректный скрипт, а также как "прибить" процесс - по ссылкам:
https://stackoverflow.com/questions/25147242/excel...
https://stackoverflow.com/questions/26303173/how-c...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Скорее всего макрос рассчитан на запуск в графическом режиме и не может работать с ActiveX компонентой - часть параметров просто не существует - отсюда и ошибка. Перепишите без getScrollTop и тому подобного, либо добавьте проверку перед выполнением. Вероятная причина - планировщик запускает в режиме без доступа к графической подсистеме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы