Итерация незарегистрированных дополнений (.xla)

Используйте platform.release()

Пример:

import platform
print(platform.release())

, если ОС является настольным ПК:

7

Если ОС является сервером: [ 117]

2008ServerR2
9
задан brettdj 21 September 2016 в 04:50
поделиться

4 ответа

Что относительно этого:

Public Sub ListAddins()

Dim ai As AddIn

    For Each ai In Application.AddIns
        If Not ai.Installed Then
            Debug.Print ai.Application, ai.Parent, ai.Name, ai.FullName
        End If
    Next

End Sub

Какое-либо использование?

0
ответ дан 4 December 2019 в 20:25
поделиться

Я все еще в поисках нормального решения для этой проблемы, но в настоящее время кажется, что чтение текстов окна всех окон рабочей книги дает набор всех открытых рабочих книг, дополнения или нет:

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Public Function GetAllOpenWorkbooks() As Collection

'Retrieves a collection of all open workbooks and add-ins.

Const EXCEL_APPLICATION_WINDOW  As String = "XLDESK"
Const EXCEL_WORKBOOK_WINDOW     As String = "EXCEL7"

Dim hWnd                As Long
Dim hWndExcel           As Long
Dim contentLength       As Long
Dim buffer              As String
Dim bookName            As String
Dim books               As Collection

Set books = New Collection

'Find the main Excel window
hWndExcel = FindWindowEx(Application.hWnd, 0&, EXCEL_APPLICATION_WINDOW, vbNullString)

Do

    'Find next window
    hWnd = FindWindowEx(hWndExcel, hWnd, vbNullString, vbNullString)

    If hWnd Then

        'Create a string buffer for 100 chars
        buffer = String$(100, Chr$(0))

        'Get the window class name
        contentLength = GetClassName(hWnd, buffer, 100)

        'If the window found is a workbook window
        If Left$(buffer, contentLength) = EXCEL_WORKBOOK_WINDOW Then

            'Recreate the buffer
            buffer = String$(100, Chr$(0))

            'Get the window text
            contentLength = GetWindowText(hWnd, buffer, 100)

            'If the window text was returned, get the workbook and add it to the collection
            If contentLength Then
                bookName = Left$(buffer, contentLength)
                books.Add Excel.Application.Workbooks(bookName), bookName
            End If

        End If

    End If

Loop While hWnd

'Return the collection
Set GetAllOpenWorkbooks = books

End Function
0
ответ дан 4 December 2019 в 20:25
поделиться

Используйте =DOCUMENTS, макро-функцию Excel4.

Dim Docs As Variant
Docs = Application.Evaluate("documents(2)")

Вот документация для него (доступна здесь):

ДОКУМЕНТЫ
Возвраты, как горизонтальный массив в текстовой форме, названиях указанных открытых рабочих книг в алфавитном порядке. Используйте ДОКУМЕНТЫ для получения названий открытых рабочих книг для использования в других функциях, которые управляют открытыми рабочими книгами.

Синтаксис
ДОКУМЕНТЫ (type_num, match_text)
Type_num является числом, указывающим, включать ли дополнительные рабочие книги в массив рабочих книг, согласно следующей таблице.

Type_num       Returns
1 or omitted   Names of all open workbooks except add-in workbooks
2              Names of add-in workbooks only
3              Names of all open workbooks

Match_text указывает рабочие книги, имена которых, которые Вы хотите, возвратились и могут включать подстановочные символы. Если match_text опущен, ДОКУМЕНТЫ возвращает названия всех открытых рабочих книг.

0
ответ дан 4 December 2019 в 20:25
поделиться

Выполняет итерации через реестр возможности? Я знаю, что это не дает Вам снимок того, что Ваш экземпляр Excel использует, но что новый экземпляр использовал бы - но в зависимости от того, для чего Вы нуждаетесь в нем, это могло бы быть достаточно хорошо.

Соответствующие ключи:

'Active add-ins are in values called OPEN*
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Options

'Inactive add-ins are in values of their full path
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Add-in Manager
0
ответ дан 4 December 2019 в 20:25
поделиться
Другие вопросы по тегам:

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