Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запуск Excel под другим пользователем - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Запуск Excel под другим пользователем
Saliaz Дата: Среда, 08.07.2015, 11:18 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день.

Возникла необходимость обновления файла Excel и отправлять эти данные по почте.
Во время реализации этой задачи сложилась следующая ситуация.

При запуске VB скрипта с сервера



Скрипт нормально запускается под "правильным" пользователем, но реализованный запуск екселя внутри скрипта открывается под "рандомным активным пользователем" из-за чего скрипт вылетает(повисает на ошибках екселя).

[vba]
Код
Set app = CreateObject("Excel.Application")
app.Visible = false
app.DisplayAlerts = false
app.Workbooks.Open ("E:\1\Шаблон.xls")
app.Run "Module1.main"
app.Workbooks("Шаблон.xls").Saveas ("E:\1\trash_shablon\ШАБЛОН " & Date & ".xls")
app.Workbooks.Close
app.Quit
Set app=nothing
[/vba]

Можно ли как-то исправить такую проблему или возможно ли вызывать "CreateObject("Excel.Application")" под определенным пользователем?

Так же для проверки был написан скрипт, чтобы убедиться в правильности логина.

[vba]
Код
Dim WshNetwork
Dim Username

Set WshNetwork = CreateObject("WScript.Network")

Username = WshNetwork.Username
Wscript.Echo Username
Set app = CreateObject("Excel.Application")
app.Visible = true
app.DisplayAlerts = false
app.Workbooks.Open ("E:\malkov_am\test.xls")
app.Run "Module1.test"
app.Workbooks("test.xls").Saveas ("E:\malkov_am\trash_shablon\test.xls")
app.Workbooks.Close
app.Quit
Set app=nothing
[/vba]

и

[vba]
Код
Sub test()
Dim UserName As String
Dim WshNetwork As Object
Set WshNetwork = CreateObject("WScript.Network")
UserName = WshNetwork.UserName

Cells(1, 1) = UserName

End Sub
[/vba]

При запуске в ручную скрипт и макрос возращают логин запустившего, но если запустить с сервера, то vbs возвращает логин авторизации сервера, а vba логин другого пользователя.


Сообщение отредактировал Saliaz - Среда, 08.07.2015, 12:34
 
Ответить
СообщениеДобрый день.

Возникла необходимость обновления файла Excel и отправлять эти данные по почте.
Во время реализации этой задачи сложилась следующая ситуация.

При запуске VB скрипта с сервера



Скрипт нормально запускается под "правильным" пользователем, но реализованный запуск екселя внутри скрипта открывается под "рандомным активным пользователем" из-за чего скрипт вылетает(повисает на ошибках екселя).

[vba]
Код
Set app = CreateObject("Excel.Application")
app.Visible = false
app.DisplayAlerts = false
app.Workbooks.Open ("E:\1\Шаблон.xls")
app.Run "Module1.main"
app.Workbooks("Шаблон.xls").Saveas ("E:\1\trash_shablon\ШАБЛОН " & Date & ".xls")
app.Workbooks.Close
app.Quit
Set app=nothing
[/vba]

Можно ли как-то исправить такую проблему или возможно ли вызывать "CreateObject("Excel.Application")" под определенным пользователем?

Так же для проверки был написан скрипт, чтобы убедиться в правильности логина.

[vba]
Код
Dim WshNetwork
Dim Username

Set WshNetwork = CreateObject("WScript.Network")

Username = WshNetwork.Username
Wscript.Echo Username
Set app = CreateObject("Excel.Application")
app.Visible = true
app.DisplayAlerts = false
app.Workbooks.Open ("E:\malkov_am\test.xls")
app.Run "Module1.test"
app.Workbooks("test.xls").Saveas ("E:\malkov_am\trash_shablon\test.xls")
app.Workbooks.Close
app.Quit
Set app=nothing
[/vba]

и

[vba]
Код
Sub test()
Dim UserName As String
Dim WshNetwork As Object
Set WshNetwork = CreateObject("WScript.Network")
UserName = WshNetwork.UserName

Cells(1, 1) = UserName

End Sub
[/vba]

При запуске в ручную скрипт и макрос возращают логин запустившего, но если запустить с сервера, то vbs возвращает логин авторизации сервера, а vba логин другого пользователя.

Автор - Saliaz
Дата добавления - 08.07.2015 в 11:18
AndreTM Дата: Среда, 08.07.2015, 14:25 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
А если шелл из скуля запустить от имени нужного пользователя?
То есть не надеяться на "автозапуск по расширению", а прописать сразу в @cmd полный вызов, по типу:
[vba]
Код
SET @cmd = 'runas /env /user:' + CURRENT_USER + ' wscript.exe E:\1\refresh.vbs'
[/vba]
Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА если шелл из скуля запустить от имени нужного пользователя?
То есть не надеяться на "автозапуск по расширению", а прописать сразу в @cmd полный вызов, по типу:
[vba]
Код
SET @cmd = 'runas /env /user:' + CURRENT_USER + ' wscript.exe E:\1\refresh.vbs'
[/vba]
Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....

Автор - AndreTM
Дата добавления - 08.07.2015 в 14:25
Saliaz Дата: Среда, 08.07.2015, 15:25 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....

Учетные записи у нас с обязательной авторизацией...

Протестировав данный вариант на паре машин, получилось так, что скрипт запускается под указанной учеткой, а вот ексель запускается все равно под учетной записью запустившего.
 
Ответить
Сообщение
Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....

Учетные записи у нас с обязательной авторизацией...

Протестировав данный вариант на паре машин, получилось так, что скрипт запускается под указанной учеткой, а вот ексель запускается все равно под учетной записью запустившего.

Автор - Saliaz
Дата добавления - 08.07.2015 в 15:25
AndreTM Дата: Среда, 08.07.2015, 16:19 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Ага, понял.
А если отказаться от VBS-прокладки и сразу запустить через RunAs именно Excel c открытием нужного файла?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеАга, понял.
А если отказаться от VBS-прокладки и сразу запустить через RunAs именно Excel c открытием нужного файла?

Автор - AndreTM
Дата добавления - 08.07.2015 в 16:19
Saliaz Дата: Среда, 08.07.2015, 17:20 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
А если отказаться от VBS-прокладки и сразу запустить через RunAs именно Excel c открытием нужного файла?

Как ты себе это представляешь.

Я попробовал выполнить ексель и cmd и поругался на отсутствие MSVCR90.dll.
 
Ответить
Сообщение
А если отказаться от VBS-прокладки и сразу запустить через RunAs именно Excel c открытием нужного файла?

Как ты себе это представляешь.

Я попробовал выполнить ексель и cmd и поругался на отсутствие MSVCR90.dll.

Автор - Saliaz
Дата добавления - 08.07.2015 в 17:20
AndreTM Дата: Четверг, 09.07.2015, 03:54 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Ну как представляю...
[vba]
Код
SET @cmd = 'runas /env /user:' + CURRENT_USER + ' E:\1\refresh.xls'
[/vba]
А уже в refresh.xls прописать все то, что выполняет VBScript (естественно, без CreateObject)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНу как представляю...
[vba]
Код
SET @cmd = 'runas /env /user:' + CURRENT_USER + ' E:\1\refresh.xls'
[/vba]
А уже в refresh.xls прописать все то, что выполняет VBScript (естественно, без CreateObject)

Автор - AndreTM
Дата добавления - 09.07.2015 в 03:54
Saliaz Дата: Четверг, 09.07.2015, 11:29 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Кстати, как для этой команды указать пароль, а то запрос на сервере завершается с сообщением о запросе пароля?

А так же выдает ошибку "E:\1\refresh.xls не является приложением Win32."
[moder]Не нужно цитировать весь пост - это нарушение правил форума.[/moder]


Сообщение отредактировал Manyasha - Четверг, 09.07.2015, 14:14
 
Ответить
СообщениеКстати, как для этой команды указать пароль, а то запрос на сервере завершается с сообщением о запросе пароля?

А так же выдает ошибку "E:\1\refresh.xls не является приложением Win32."
[moder]Не нужно цитировать весь пост - это нарушение правил форума.[/moder]

Автор - Saliaz
Дата добавления - 09.07.2015 в 11:29
AndreTM Дата: Четверг, 09.07.2015, 11:40 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
А, да... Зачем нам вообще RunAs в последнем случае?
Ведь если не будет промежуточного вызова через WSH - то и запустим мы всего один инстанс Excel.Application (а потом нужный файл для обработки откроется уже в нём, через .Open). так что просто вызывайте
[vba]
Код
SET @cmd = 'E:\1\refresh.xls'
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА, да... Зачем нам вообще RunAs в последнем случае?
Ведь если не будет промежуточного вызова через WSH - то и запустим мы всего один инстанс Excel.Application (а потом нужный файл для обработки откроется уже в нём, через .Open). так что просто вызывайте
[vba]
Код
SET @cmd = 'E:\1\refresh.xls'
[/vba]

Автор - AndreTM
Дата добавления - 09.07.2015 в 11:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!