Excel не работает vbs

Не работают макросы в Excel? Включите их выполнение, добавьте специальный модель с кодом, проверьте версию ОС и Эксель, убедитесь в соответствии пакета приложений, активируйте Майкрософт Офис, снимите блокировку файла, проверьте систему безопасности и применяемые библиотеки. Ниже подробно рассмотрим, в чем могут быть причины подобной неисправности, и какие шаги предпринимать для ее устранения.

Причины

Для начала стоит разобраться, почему не работает макрос в Excel, ведь от этого зависят дальнейшие шаги. К основным причинам стоит отнести:

  1. Функция отключена.
  2. Отключение отслеживания событий.
  3. Устаревшая операционная система.
  4. Несоответствие разработчика пакета офисных приложений.
  5. Устаревшая версия Майкрософт Офис.
  6. Неактивированная версия Excel.
  7. Заблокированный файл.
  8. Неправильные настройки безопасности.
  9. Отсутствие необходимой библиотеки и т. д.

Выше рассмотрены основные причины, почему не удается выполнить макрос в Excel. Все они могут быть решены самостоятельно с помощью приведенных ниже рекомендации. Подробнее на решении вопроса остановимся ниже.

Что делать

Многие пользователи теряются в ситуации, когда не включаются или вообще не работают макросы в Excel. Такая проблема не дает нормально пользоваться приложением и заставляет искать альтернативные варианты.

Включите опцию

Первое, что необходимо сделать — включить функцию для обеспечения ее работоспособности. Здесь многое зависит от версии Эксель.

Если не работают макросы в Excel 2003, сделайте следующие шаги:

  1. Войдите в «Сервис».
  2. Перейдите в раздел «Безопасность».
  3. Кликните «Уровень макросов «Низкий».

В случае, когда не работают макросы в Excel 2007, включите их следующим образом:

  1. Жмите на кнопку «Офис».
  2. Войдите в параметры Excel.
  3. Кликните на «Центр управления безопасности».
  4. Войдите в «Параметры центра управления безопасностью».
  5. Жмите на «Параметры макросов».
  6. Кликните на «Разрешить все …».

В ситуации, когда не работают макросы в Excel 2016, сделайте следующие шаги:

  1. Войдите в раздел «Файл».
  2. Кликните на кнопку «Параметры».
  3. Зайдите в «Центр управления безопасностью».
  4. Войдите в «Параметры центра управления безопасностью».
  5. Кликните на «Параметры …».
  6. Жмите на «Разрешить все …».

После внесения изменений параметра безопасности перезапустите приложение Excel, а именно закройте его полностью и откройте снова. Лишь после этого изменения вступают в силу.

Добавьте нужный модуль в книгу

Бывают ситуации, когда макросы включены, но не работают в Excel из-за отключения каким-либо элементом отслеживания событий. В таком случае сделайте следующее:

  1. Перейдите в редактор VBA с помощью клавиш Alt+F11.
  2. Вставьте указанный ниже код.

Sub Reset_Events()

Application.EnableEvents = True

End Sub

  1. Для выполнения кода поставьте курсор в любой точке между началом и концом.
  2. Кликните F5.

Проверьте операционную систему

В ситуации, когда не отображаются макросы в Excel, обратите внимание на тип операционной системы. К примеру, Майкрософт Офис, который подходит для Виндовс, на Мак ОС уже работать не будет. Причина в том, что в приложении используются разные библиотеки. Даже если надстройки и функционируют, могут быть сбои в работе. Вот почему при появлении проблем нужно проверить ОС на соответствие.

Обратите внимание на разработчика

Если в Экселе не работают макросы, причиной может быть другой разработчик. Так, пользователи Excel часто применяют OpenOffice или LibreOffice. Эти пакеты созданы на разных языках программирования, которые имеют индивидуальные особенности. Так, если надстройки написаны на Visual Basic for Application, он может не работать в указанных выше офисных приложениях. Вот почему необходимо уточнять, для какого пакета создан макрос / надстройка.

Проверьте версию Майкрософт Офис

В Макрософт Офис 2003 применяются надстройки xla для Excel. В современных версиях расширение поменялось на xlam. Если ставить макросы старого типа в приложения Офис 2007 и больше, никаких трудностей не происходит. Если же вы попытаетесь поставить новую надстройку на старую версию Excel, она зачастую не работает. Вот почему важно обратить внимание на этот параметр при выборе.

Убедитесь в наличии пакета VBA

Одной из причин, почему не запускается макрос в Excel, может быть отсутствие пакета VBA. Для успешного запуска надстройки необходимо, чтобы этот пакет был установлен. Иногда он уже установлен в Офис, но так происходит не всегда. Для проверки жмите комбинацию на Alt+F11. Если после этого появляется Visual Basic, компонент можно считать установленным. В ином случае его нужно поставить. Для этого:

  • Зайдите в «Пуск», а далее «Панель управления / Программы и компоненты».

  • Выберите программу Майкрософт Офис.
  • Жмите на кнопку «Изменить».

  • Запустить файл установки Setup.exe.
  • Кликните на «Добавить или удалить компоненты».
  • Выберите в списке Visual Basic и установите его.

Активируйте Офис

Если в Excel 2007 не работает кнопка «макросы», причиной может быть отсутствие активации приложения. Для этого жмите на кнопку «Активировать» и следуйте инструкции. В большинстве случаев такая опция является платной.

Снимите блокировку файла

Учтите, что документ, полученный с другого ПК / ноутбука, может заблокироваться. Для разблокировки файла нужно нажать ПКМ и в разделе «Общие» кликнуть на «Разблокировать».

 Проверьте библиотеки

В случае, когда параметры макросов не активны в Excel, причиной может быть появление ошибки «Can’t find project or library». При этом, надстройка работает на другом ПК / ноутбуке, а здесь возникают проблемы. Ошибку легко устранить, если в окне, которое идет за сообщением об ошибке, снять отметки в полях Missing. Для вызова окна можно выбрать пункт меню Tools / References.

Проверьте настройки безопасности

В ситуации, когда не работают макросы в Excel, можно добавить надежные расположения или настроить доступ к объектной модели VBA. Для этого в Офис 2007 необходимо сделать следующее:

  1. Войдите в Меню
  2. Кликните на пункт «Параметры».
  3. Жмите на «Центр управления безопасностью».
  4. Войдите в «Параметры центра управления безопасностью».
  5. Кликните на «Параметры макросов» и «Доверять доступ к объектной модели проектов».

Зная, почему не работают макросы в Excel, вы можете с легкостью исправить проблему и восстановить работоспособность. Если же сложности в работе возникают, вы всегда можете воспользоваться инструкцией в статье.

В комментариях расскажите, какой из приведенных выше вариантов вам помог, и что еще можно сделать.

Отличного Вам дня!

Тормоз

4 / 4 / 1

Регистрация: 09.10.2019

Сообщений: 217

1

24.03.2021, 14:50. Показов 4460. Ответов 14

Метки excel, vbs (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте!

На vbs надо открыть таблицу Excel, прочитать данные, обработать, и выйти.
Начал с простого — открытия и закрытия файла(таблицы).
И заметил, что хотя скрипт заканчивает работу, сам процесс EXCEL.EXE *32 остаётся в памяти. Причём, сколько раз запустишь скрипт, столько копий и останется.
Сам скрипт (то, что закоментировано, это различные варианты таки прекратить эту гнусную традицию):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Set xls = CreateObject("Excel.Application")
Set oWorkBook = xls.workbooks.open(Filename,,True)              
 
If Err.Number <> 0 Then 
    MsgBox "Err.Description" & Err.Description
    Quit
End if
 
' oWorkBook.Close           
Set oWorkBook = Nothing 
' oWorkBook.Close           
'Set oWorkBook = Nothing    
' xls.Close
' Set oWorkBook = Nothing
' Set xls = Nothing
xls.Quit
'xls.Close

Подскажите, пожалуйста. На просторах нашёл только борьбу, но не рецепт.
Excel 2016.



0



I can

bite

3693 / 3126 / 692

Регистрация: 13.04.2015

Сообщений: 7,314

24.03.2021, 15:02

2

Лучший ответ Сообщение было отмечено Тормоз как решение

Решение

Visual Basic
1
2
3
4
oWorkBook.Close,false           
Set oWorkBook = Nothing 
xls.Quit
Set xls = Nothing

Добавлено через 47 секунд

Цитата
Сообщение от Тормоз
Посмотреть сообщение

Quit

Случае ошибки у тебя происходит выход без закрытия приложения.



1



Тормоз

4 / 4 / 1

Регистрация: 09.10.2019

Сообщений: 217

24.03.2021, 15:32

 [ТС]

3

Спасибо, но не помогло.
В Диспетчере задач так и висел Excel, а при попытке закрыть принудительно сообщение:
Ошибка: Сбой при удалённом вызове процедуры
на строке:
oWorkBook.Close, False

Добавлено через 16 минут
Сделал закрытие так, и вроде всё получилось:

Visual Basic
1
2
3
4
5
xls.DisplayAlerts = False
oWorkBook.Close, False
Set oWorkBook = Nothing 
xls.Quit
Set xls = Nothing



0



bite

3693 / 3126 / 692

Регистрация: 13.04.2015

Сообщений: 7,314

24.03.2021, 15:38

4

Цитата
Сообщение от Тормоз
Посмотреть сообщение

xls.DisplayAlerts = False

Надеюсь, знаешь, что это значит?



1



4 / 4 / 1

Регистрация: 09.10.2019

Сообщений: 217

25.03.2021, 07:53

 [ТС]

5

Да.
Мне не надо сохранять исходный файл.



0



bite

3693 / 3126 / 692

Регистрация: 13.04.2015

Сообщений: 7,314

25.03.2021, 11:18

6

Цитата
Сообщение от Тормоз
Посмотреть сообщение

Да.
Мне не надо сохранять исходный файл.

Нет. Совсем не то.



1



Punkt5

малоболт

1143 / 442 / 193

Регистрация: 30.01.2020

Сообщений: 1,095

25.03.2021, 13:05

7

Тормоз Может так попробовать?

Visual Basic
1
2
3
4
5
6
7
8
9
Set xls = CreateObject("Excel.Application")
xls.visible = True ' Добби покажет открытый файл
Set oWorkBook = xls.workbooks.open(FullFileName,,True)              
 
wscript.Sleep 5000 'Подождем 5 секунд. Пусть хозяин увидит
 
oWorkBook.Close           'Закроем
xls.Quit ' Выйдем из Excel. Вот сейчас он пропадёт из панели задач.
Set oWorkBook = Nothing : Set xls = Nothing



1



5745 / 2534 / 997

Регистрация: 06.06.2017

Сообщений: 8,638

25.03.2021, 16:34

8

Цитата
Сообщение от I can
Посмотреть сообщение

oWorkBook.Close,false

Это что за синтаксис такой не vb-шный?



1



4 / 4 / 1

Регистрация: 09.10.2019

Сообщений: 217

02.04.2021, 09:26

 [ТС]

9

Цитата
Сообщение от I can
Посмотреть сообщение

Нет. Совсем не то.

Уточню, мне не надо сохранять исходный файл, поэтому мне не нужны предупреждения, и не нужен диалог с Excel
Извините за паузу, болел.

Цитата
Сообщение от FlasherX
Посмотреть сообщение

Это что за синтаксис такой не vb-шный?

Это vbs. Те же яйца, вид сбоку.

Цитата
Сообщение от Punkt5
Посмотреть сообщение

xls.visible = True ‘ Добби покажет открытый файл

не нужен диалог с Excel, всё должно быть тихо и без вопросов.

Всем спасибо за участие и соучастие, всем здоровья!



0



5745 / 2534 / 997

Регистрация: 06.06.2017

Сообщений: 8,638

02.04.2021, 11:29

10

Цитата
Сообщение от Тормоз
Посмотреть сообщение

Это vbs. Те же яйца, вид сбоку.

Какой ещё вид сбоку? Это ошибка и неверный синтаксис. Такое не будет работать на vb(a,s).



1



4 / 4 / 1

Регистрация: 09.10.2019

Сообщений: 217

02.04.2021, 13:04

 [ТС]

11

Работает же.



0



5745 / 2534 / 997

Регистрация: 06.06.2017

Сообщений: 8,638

02.04.2021, 13:11

12

Не верю. Должно выдать «Недопустимое число аргументов или присвоение значения свойства:».



0



Тормоз

4 / 4 / 1

Регистрация: 09.10.2019

Сообщений: 217

02.04.2021, 13:14

 [ТС]

13

Специально посмотрел в работающем коде:

Visual Basic
1
oWorkBook.Close, False

Добавлено через 48 секунд

Цитата
Сообщение от FlasherX
Посмотреть сообщение

Не верю. Должно выдать «Недопустимое число аргументов или присвоение значения свойства:».

Ничем помочь больше не могу, извините.



0



5745 / 2534 / 997

Регистрация: 06.06.2017

Сообщений: 8,638

02.04.2021, 13:22

14

Фантастика. Не знаю, как этот рудимент может не выдать ошибки. В любом случае , False тут делать нечего.



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34702 / 19224 / 4037

Регистрация: 12.02.2012

Сообщений: 32,180

Записей в блоге: 13

01.05.2021, 16:23

15



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

01.05.2021, 16:23

15

Открыть файл Ексель скриптом формата vbs

Egider

Дата: Вторник, 14.01.2020, 19:24 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Использую для запуска файла Запуск.xlsm созданный скрипт Запуск.vbs, с записанным в его модуль книги текстом:
[vba]

Код

Запуск
Sub Запуск()
    Dim objXL
    Dim Secur
    Set objXL = CreateObject(«Excel.Application»)
    objXL.Visible = TRUE
    secur = objXL.AutomationSecurity
    objXL.AutomationSecurity = 1
    objXL.Workbooks.Open replace(Wscript.ScriptFullName,».vbs»,».xlsm»)
    objXL.AutomationSecurity = secur
End Sub

[/vba]
Подскажите пожалуйста как закрыть доступ к файлу Запуск.xlsm при его открытии через двойной щелчок мышки. Другими словами чтоб файл запускался только скриптом. СПАСИБО.


Пенсионер

 

Ответить

Gustav

Дата: Вторник, 14.01.2020, 20:10 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

985

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Наверное, самый простой способ — изменить расширение файла на чужое: например, «.xlsm» — на «.doc». И потом открывайте у себя уже этот «doc»:
[vba]

Код

objXL.Workbooks.Open replace(Wscript.ScriptFullName,».vbs»,».doc»)

[/vba]
Возможно, придется добавить в код пару операторов, подавляющих предупреждения при открытии.


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Nic70y

Дата: Среда, 15.01.2020, 08:43 |
Сообщение № 3

Группа: Друзья

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

сделать файл скрытым
и соот.

К сообщению приложен файл:

4028744.gif
(41.1 Kb)


ЮMoney 41001841029809

Сообщение отредактировал Nic70yСреда, 15.01.2020, 08:44

 

Ответить

boa

Дата: Среда, 15.01.2020, 11:26 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

Egider,
Установите «очень сложный» пароль на открытие файла
и открывайте скриптом
[vba]

Код

Start
Sub Start()
    Dim objXL
    Dim Secur
    Dim sPass
    sPass = «очень сложный пароль»
    On Error Resume Next
    Set objXL = GetObject(, «Excel.Application») ‘ если Excel уже открыт, то присваиваем открытый экземпляр
    If objXL Is Nothing Then Set objXL = CreateObject(«Excel.Application») ‘ иначе, открываем новый
    objXL.Visible = TRUE
    secur = objXL.AutomationSecurity
    objXL.AutomationSecurity = 1
    objXL.Workbooks.Open replace(Wscript.ScriptFullName,».vbs»,».xlsm»), , , , sPass
    objXL.AutomationSecurity = secur
End Sub

[/vba]


Сообщение отредактировал boaСреда, 15.01.2020, 11:37

 

Ответить

Egider

Дата: Среда, 15.01.2020, 14:53 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Спасибо Gustav и Nic70y за идеи.
Уважаемый ВОА, пароль установил в раздел Password вкладки Properties — Эта Книга. Все работает. Спасибо.
Сменить пароль понятно как, а как его вообще снять, если отпадет в нем необходимость? Спасибо


Пенсионер

 

Ответить

boa

Дата: Среда, 15.01.2020, 15:01 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

Egider,

так же как и ставили
только новый пароль должен быть пустым


 

Ответить

Egider

Дата: Среда, 15.01.2020, 15:56 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Да, я уже понял. Что-то первый раз не получилось. Сейчас все ок.
Единственное, при открытии файла формат листа сверху сдвинут вниз на 2-3 см. Почему?


Пенсионер

 

Ответить

boa

Дата: Среда, 15.01.2020, 16:14 |
Сообщение № 8

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

при открытии файла формат листа сверху сдвинут вниз на 2-3 см.

shock да ладно,

Excel запоминает последнее отображение

Возможно это следствие работы каких-то ваших макросов…

попробуйте открыть файл, «сдвинуть формат» на место и закрыть Excel.
Повторное открытие должно привести все в порядок yes


Сообщение отредактировал boaСреда, 15.01.2020, 16:24

 

Ответить

Egider

Дата: Среда, 15.01.2020, 19:03 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Без скрипта открывается нормально, через скрипт сдвигается. Раскрывал в полный экран, сохранял.
Однако при новом открытии скриптом ничего не меняется. Вновь отступ сверху.???


Пенсионер

 

Ответить

boa

Дата: Среда, 15.01.2020, 21:26 |
Сообщение № 10

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365


а не надо раскрывать в полный экран. Я разве об этом писал?
надо в оконном режиме нстроить вид.
Или тогда уже скриптом раскрывайте на весь экран
[vba]

Код

objXL.WindowState = xlMaximized

[/vba]


 

Ответить

Egider

Дата: Четверг, 16.01.2020, 17:28 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Уважаемый boa, уважаемые форумчане — специалисты если есть возможность подскажите пожалуйста:
Возможно-ли использовать скрипт (макрос) для открытия следующего файла с паролем из открытого?
При этом для открытия использовать кнопку. Кнопка есть, работает но при открытии запрашивается пароль.
Как его обойти (что-то прописать в макросе) чтоб файл открывался. И сохранялась функция открытия этого файла
с запросом пароля через двойной клик мышки.


Пенсионер

 

Ответить

boa

Дата: Четверг, 16.01.2020, 19:24 |
Сообщение № 12

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

[vba]

Код

workbooks.open password:=»123″

[/vba]
а вообще-то в хэлпе все это есть


 

Ответить

Egider

Дата: Пятница, 17.01.2020, 10:16 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Извините меня, но объясните куда дописать Вами указанное.
Вот у меня есть макрос кнопки в «файле 1» для открытия другого файла «ПРОБА01», Лист1
[vba]

Код

Sub Открыть_ПРОБА01()
Application.Workbooks.Open(«C:UsersНиколайDesktopЗапуск СкриптомПРОБА01.xlsm»).Worksheets(«Лист1»).Activate
End Sub

[/vba]
Файл «ПРОБА01» имеет пароль 123. Спасибо.


Пенсионер

 

Ответить

Egider

Дата: Пятница, 17.01.2020, 10:34 |
Сообщение № 14

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Добавлю, что задача моя в том, чтобы с кнопки открывать файл «ПРОБА01» без запроса пароля.
А если открывать файл напрямую, то запрашивался чтоб пароль.


Пенсионер

 

Ответить

boa

Дата: Пятница, 17.01.2020, 10:54 |
Сообщение № 15

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

Egider,
А вы по ссылке заглядывали?
[vba]

Код

Sub Открыть_ПРОБА01()
Application.Workbooks.Open(FileName:=»C:UsersНиколайDesktopЗапуск СкриптомПРОБА01.xlsm», password:=»123″).Worksheets(«Лист1»).Activate
End Sub

[/vba]


 

Ответить

Egider

Дата: Пятница, 17.01.2020, 11:51 |
Сообщение № 16

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

СПАСИБО УВАЖАЕМЫЙ ВОА. Все осознал.


Пенсионер

 

Ответить

Egider

Дата: Пятница, 17.01.2020, 16:38 |
Сообщение № 17

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Простите, но вновь Столкнулся с задачей: У меня 10 листов в открываемом файле, которые открываются своей кнопкой.
И что, нужно теперь для каждого листа в макрос вставлять пароль? Может есть какой-либо выход?


Пенсионер

 

Ответить

RAN

Дата: Пятница, 17.01.2020, 17:20 |
Сообщение № 18

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Может есть какой-либо выход?

Конечно есть. Снять пароли с листов.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Egider

Дата: Пятница, 17.01.2020, 17:38 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 42


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Пароль есть только на файле ПРОБА01. На листах его не ставил.


Пенсионер

 

Ответить

boa

Дата: Пятница, 17.01.2020, 18:04 |
Сообщение № 20

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

Egider, Разделяй и властвуй
[vba]

Код

Option Explicit

Sub Открыть_ПРОБА01()
  Call ActivateSheet(«Лист1»)
End Sub
Sub Открыть_ПРОБА02()
  Call ActivateSheet(«Лист2»)
End Sub

Sub ActivateSheet(sSheetName$)
  Dim sFileName$, oWb As Workbook
  sFileName = «C:UsersНиколайDesktopЗапуск СкриптомПРОБА01.xlsm»
  If IfFileOpened(sFileName) Then Set oWb = Workbooks(sFileName) Else Set oWb = OpenBook(sFileName)
  oWb.Activate
  oWb.Worksheets(sSheetName$).Activate
End Sub

Function OpenBook(sFileName$) As Workbook
  Set OpenBook = Application.Workbooks.Open(FileName:=sFileName, Password:=»123″)
End Function

Function IfFileOpened(sFileName$) As Boolean
    Dim oWb As Workbook
    sFileName = Split(sFileName, PS)(UBound(Split(sFileName, PS)))
    For Each oWb In Workbooks
        If oWb.Name = sFileName$ Then IfFileOpened = True: Exit For
    Next
End Function

Function PS(): PS = Application.PathSeparator: End Function ‘возвращает системный разделитель папок

[/vba]


 

Ответить

@Robert: Я попытался адаптировать ваш код с относительным путем и создал пакетный файл для запуска VBS.

VBS запускается и закрывается, но не запускает макрос… Любая идея о том, где проблема может быть?

Option Explicit

On Error Resume Next

ExcelMacroExample

Sub ExcelMacroExample() 

  Dim xlApp 
  Dim xlBook 

  Set xlApp = CreateObject("Excel.Application")
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  strFilePath = objFSO.GetAbsolutePathName(".") 
  Set xlBook = xlApp.Workbooks.Open(strFilePath, "ExcelsCLIENTES.xlsb") , 0, True) 
  xlApp.Run "open_form"


  Set xlBook = Nothing 
  Set xlApp = Nothing 

End Sub

Я удалил «Application.Quit», потому что мой макрос вызывает пользовательскую форму, заботясь об этом.

Приветствия

ИЗМЕНИТЬ

Я действительно отработал это, на всякий случай, когда кто-то хочет запустить пользовательскую форму «подобно» автономному приложению:

Проблемы, с которыми я столкнулся:

1 — Я не хотел использовать событие Workbook_Open, поскольку excel заблокирован только для чтения.
2 — Команда партии ограничена тем фактом, что (насколько мне известно) она не может вызвать макрос.

Сначала я написал макрос, чтобы запустить мою пользовательскую форму, скрывая приложение:

Sub open_form()
 Application.Visible = False
 frmAddClient.Show vbModeless
End Sub

Затем я создал vbs для запуска этого макроса (выполнение этого с относительным путем было сложным):

dim fso
dim curDir
dim WinScriptHost
set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")
set fso = nothing

Set xlObj = CreateObject("Excel.application")
xlObj.Workbooks.Open curDir & "ExcelsCLIENTES.xlsb"
xlObj.Run "open_form"

И я, наконец, сделал пакетный файл для выполнения VBS…

@echo off
pushd %~dp0
cscript Add_Client.vbs

Обратите внимание, что в моем Userform_QueryClose:

я также включил «Установить обратно в видимый»

Private Sub cmdClose_Click()
Unload Me
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    ThisWorkbook.Close SaveChanges:=True
    Application.Visible = True
    Application.Quit
End Sub

В любом случае, спасибо за вашу помощь, и я надеюсь, что это поможет, если кому-то это понадобится

So the setup on this WinServer 2012 R2 64bit is:

Windows Task Scheduler -> cscript .vbs file -> opening excel and run a sub in the main module

This runs fine in the background when I double click the .vbs file, but when I trigger the .vbs via the task scheduler, excel opens, but doesn’t load the file or run the sub (not sure which). The task runs under an domain user that has administration rights on the machine. I use the same user when i try clicking on the .vbs

Code that is being run, in order:

Task scheduler launches:

C:WINDOWSsystem32cscript.exe «D:xyztrigger.vbs»

.vbs does:

Option Explicit

Dim xlApp, xlBook, xlsheets, xlcopy
Set xlApp = CreateObject("Excel.Application")
xlapp.Interactive = False
xlapp.DisplayAlerts = False
xlapp.AskToUpdateLinks = False
xlapp.AlertBeforeOverwriting = False
Set xlBook = xlApp.Workbooks.Open("D:xyzexcelfile.xlsm")

On Error Resume Next
Call xlBook.Application.Run("Main.Extrnal_Trigger")

xlbook.Saved = True
xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlcopy = Nothing
Set xlApp = Nothing

WScript.Quit(1)

Excel code:

Sub Extrnal_Trigger()

Application.EnableEvents = False
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False

Call update_button
Call MainProgram
Call ReportSave

End Sub

How can I find out where the .vbs or the excel hangs and why? A very similar setup on another machine does run without troubles. It is virtually identical to the code quoted here.

I realize there are several bad practices (like not cleaning up xlapp settings), but I’d like to get the process running before cleaning up.


/edit:
Removing

On Error Resume Next

from the .vbs does not display an error.


/edit2:
I tried reverting as far back as possible.

Option Explicit
Dim fso, f, s, log

Set fso = CreateObject("Scripting.FileSystemObject")

Set log = fso.CreateTextFile("D:xyzTESTlog.txt")
log.WriteLine "before fso"

Set f = fso.GetFile("D:xyzexcel.xlsm")
s = f.Path & "  "
s = s & "Created: " & f.DateCreated & "  "
s = s & "Last Accessed: " & f.DateLastAccessed & "  "
s = s & "Last Modified: " & f.DateLastModified   

log.WriteLine "after fso"
log.writeline "fso content"
log.writeline s

This works when being triggered by the task scheduler via cscript.exe.
I will try to modify to log what’s happening around the call to the excel file.


/edit3:
Debugging showed that this

Set xlBook = xlApp.Workbooks.Open("D:xyzexcel.xlsm")

never happens. I put out error numbers and got error 1004 for this call. Still not sure what’s the issue, but at least I got an error number now.


/edit4:

error 1004 when trying to run this as a scheduled tasks persists. When I am running it by double clicking the .vbs, everything works.

Понравилась статья? Поделить с друзьями:
  • Excel не работает application quit
  • Excel не пустая ячейка в диапазоне пустых
  • Excel не отображать нули на графике
  • Excel не прочитывает ячейку в формуле
  • Excel не отображать на диаграмме нулевые значения