powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Имя exe-файла Word, Excel (Application)
22 сообщений из 22, страница 1 из 1
Имя exe-файла Word, Excel (Application)
    #39146045
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Что-то не найду, где в VBA прописано имя файла Application? То есть WORD.EXE, EXCEL.EXE.

Нашел только Application.Path, хотелось бы к нему добавить Name, а лучше сразу FullName :)
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146082
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождягде в VBA прописано имя файла Application? То есть WORD.EXE, EXCEL.EXE.
Нигде - это свойство процесса/потока, а не приложения. Максимум что можно получить - это точный тип объекта Application (Word.Application, Excel.Application и пр.).
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146098
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНигде - это свойство процесса/потока...
Благодарю. Где-то так я и думал, ибо справка и поисковики ответа не дали.

Как тогда запустить (Run) копию активного приложения, например Excel?
Такое писать как-то не солидно: Application.Path & "\excel.exe"
Замечу, что одновременно установлено несколько версий Excel.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146121
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождяКак тогда запустить (Run) копию активного приложения, например Excel?
Ну например
Код: vbnet
1.
Set newExcelApp = CreateObject("Excel.Application")
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146132
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНу например
Код: vbnet
1.
Set newExcelApp = CreateObject("Excel.Application")


Нет, это запуск приложения Excel, принятого по умолчанию в системе. Аналог:
Код: vbnet
1.
CreateObject("Wscript.Shell").Run "excel.exe"


А надо конкретную версию Excel, в которой выполняется код, потому и нужны полные путь и имя файла.
Запускать буду через скрипт, где-то так:
Код: vbnet
1.
CreateObject("Wscript.Shell").Run """C:\Program Files\Microsoft Office\Office15\excel.exe"""
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146143
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу замечу, что это тоже не работает:
Код: vbnet
1.
2.
CreateObject("Excel.Application.14")
CreateObject("Excel.Application.15")


Видимо, придется лезть в реестр.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146144
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождянадо конкретную версию Excel, в которой выполняется код
Ну так и создавайте не Excel.Application (который запустит дефолтную версию), а конкретный тип в зависимости от нужной версии. А ещё лучше - оставайтесь в рамках существующего Excel.Application, просто открывайте новую (Application.WorkBooks.Add) или существующую (Application.WorkBooks.Open) книгу.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146156
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНу так и создавайте не Excel.Application...а конкретный тип в зависимости от нужной версии...
Не работает CreateObject("Excel.Application.XX"), писал выше. Хотя, по-простому установлены, и прекрасно одновременно работают, Office 2010 и 2013. Нужен 100% рабочий код, для масс. Потому, склоняюсь к Run.
Akina...А ещё лучше - оставайтесь в рамках существующего Excel.Application...
Не подходит, так как пишу скрипт перезапуска Excel. Уперся в exe-имя.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146534
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождяOffice 2010 и 2013Я еще понимаю, когда надо 2003 и версии выше различить. Но 2010 и 2013. В чем необходимость запускать ту или иную версию в данном случае? Может если понять цель, то можно будет найти средство, отличное от ранее рассмотренных?
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146579
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist...Может если понять цель, то...
Цель простая - перезапустить Excel, в котором работает код.
Причина сложнее - пока запущен Excel, невозможно удалить (не путать с отключить) надстройку из списка Excel.
Макрос запускает скрипт который: закрывает Excel, затирает надстройку, запускает Excel, хорошо бы тот же самый :)
Последнее, в принципе, не критично, но дает гарантию, что надстройка удалена успешно!

P.S. Тоже запарились искать ответ? :)
P.P.S. Нашел решение через API, но надеялся на что попроще :(
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146584
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождяНашел решение через APIНу дык поделись - вдруг ещё кому понадобится...
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146629
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глядишь кому сгодится:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Option Explicit

#If Win64 Then
    Private Declare PtrSafe Function GetModuleFileNameExW Lib "psapi" ( _
        ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As LongPtr, ByVal nSize As Long) As Long
    Private Declare PtrSafe Function GetCurrentProcess Lib "kernel32" () As Long
#Else
    Private Declare Function GetModuleFileNameExW Lib "psapi" ( _
        ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As Long, ByVal nSize As Long) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
#End If

Private Function Application_ExePathName() As String
Const MaxPathLen As Long = 1024
Dim Buf As String, L As Long
    On Error Resume Next
    Buf = VBA.String$(MaxPathLen, VBA.Chr$(0))
    L = GetModuleFileNameExW(GetCurrentProcess, 0, VBA.StrPtr(Buf), MaxPathLen)
    Application_ExePathName = VBA.Left$(Buf, L)
    On Error GoTo 0
End Function


Тестировал вплоть до Office 2003 + XP, но должно работать и в Office 2000.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146642
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не объявить строку фиксированной длины и избавиться от заморочки с инициализацией?
Код: vbnet
1.
Dim Buf As String * 1024
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146650
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА почему не объявить строку фиксированной длины...
Есть нюансы. Пробовали? :)
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146660
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто любопытствую. Опять же привык, что строки фиксированной длины обрабатываются быстрее.
И пока ни с проблемами, ни даже с нюансами при использовании строк фиксированной длины при обращении к API не сталкивался. Не просветите?
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146716
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina...при использовании строк фиксированной длины при обращении к API не сталкивался. Не просветите?
Что-то связанное с памятью, не помню уже :) Можно почитать например тут:
http://bytecomb.com/vba-internals-getting-pointers/
http://bytecomb.com/vba-scalar-variables-and-pointers-in-depth/
http://www.codeproject.com/Articles/5685/Pointers-in-Visual-Basic-using-Undocumented-Functi\
Может разберетесь и приспособите фикс...
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146745
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождяМожно почитать например тутПросмотрел. Нет там ничего вменяемого.

На самом деле напрочь не могу понять, откуда могли бы вылезти проблемы - StrPtr корректно даёт адрес первого байта для любого типа стринга, а API-функция использует переданный указатель, в принципе не зная, на что этот указатель, для неё это просто область памяти, куда надо положить или откуда забрать данные.

Единственное, что я могу придумать - это повторное использование fixed length string в рамках одной области видимости, когда она предыдущими действиями НЕ забита нулевыми байтами, и тогда функция может неправильно определить длину переданных строковых данных. Но в данном конкретном случае такого быть не может.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146754
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и я не смог вспомнить/найти отчего так, но все используют именно переменную строку, иначе - ошибка.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146756
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сын вождя,

Попробуйте, не получиться таким кодом удалить надстройку:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Sub test()
    Dim objShell As Object, rh
    Dim sExVersion As String
    Dim i As Long, l As Long
    Dim sRegP As String, sAddinName As String
    Const sAddToDelName As String = "TestAddin.xla" 'имя надстройки для удаления(с расширением)
    
    sExVersion = Application.Version
    Set objShell = CreateObject("WScript.Shell")
    
    For i = 1 To 20
        On Error GoTo END_
        sRegP = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & _
                sExVersion & "\Excel\Options\OPEN" & i
        rh = objShell.Regread(sRegP)
        l = InStrRev(rh, "\")
        sAddinName = Mid(rh, l + 1, Len(rh) - l - 1)
        Debug.Print sAddinName
        If sAddinName = sAddToDelName Then
            objShell.RegDelete sRegP
            MsgBox "Надстройка " & sAddinName & " удалена и отключена", vbInformation
            Exit For
        End If
    Next i
END_:
Set objShell = Nothing
End Sub
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146767
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, т.к. даже при таком подходе надо будет перезапускать Excel. Надо поковырять в этом направлении - может получиться вырубить начисто без перезапуска.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146791
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristПопробуйте, не получиться таким кодом удалить надстройку...
Спасибо за подсказку, про параметр OPEN реестра не знал. Но это имена подключенных надстроек. Еще, именование такое: OPEN , OPEN1, OPEN2...

Список отключенных надстроек лежит здесь:
HKEY_CURRENT_USER\Software\Microsoft\Office\xx\Excel\Add-in Manager

Проблема в том, что Excel обновляет реестр при выходе. То есть, все текущие отключения / подключения надстроек отразятся в реестре только после выхода из Excel. По-любому, надстройку надо сначала отключать. Значит, после закрытия Excel, она появится в разделе "Add-in Manager". Думаю, без перезапуска Excel не обойтись.
...
Рейтинг: 0 / 0
Имя exe-файла Word, Excel (Application)
    #39146798
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно глянуть мой халявный инсталлятор для Excel, где это все реализовано:
http://mtdmacro.ru/create/starter.xls
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Имя exe-файла Word, Excel (Application)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]