Excel: изменить ссылку на надстройку без открытия файла - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть несколько (как в сотнях) электронных таблиц с использованием надстройки (назовем это Addin2003).Из-за перехода на новые версии Excel мне нужны некоторые из этих электронных таблиц, чтобы использовать новый плагин (назовем его Addin2010).

Существует ли простой способ проверить и изменить ссылки, используемые в этих электронных таблицах, безоткрывая их.

Так что-то вроде (псевдокод):

For each wbk in aListOfWorkbooks
  If wbk.containsReference("Addin2003") And someOtherCriteria Then
    wbk.removeReference("Addin2003")
    wbk.addReference("Addin2010")
  End If
Next

РЕДАКТИРОВАТЬ

Чтобы было понятнее, в Excel 2003 и 2010 не загружен один и тот же надстройка,поэтому я хочу изменить некоторые электронные таблицы, основанные на надстройке 2003 года, и заставить их использовать надстройку 2010 года.Другими словами, это будет эквивалентно открытию рабочей книги, открытию редактора VBA, переходу в меню «Инструменты / ссылки» и изменению ссылки с Addin 2003 (которая помечена как MISSING) на Addin 2010. Если я открою один из нихВ книгах в Excel 2010 (в которых нет надстройки 2003 года) я получаю различные ошибки из-за того, что Excel не может найти надстройку 2003 года.Вот почему я подумал, что было бы проще не открывать рабочие книги, чтобы изменить их ссылки.

ОКОНЧАТЕЛЬНОЕ СЛОВО

Кажется, что это невозможно сделать, и мне придется физически открытьфайлы для изменения ссылок.Спасибо всем.

1 Ответ

2 голосов
/ 08 февраля 2012

Возможно, вы захотите сделать что-то похожее на это:

Sub ChangeAddins()

    Dim oAddin As AddIn
    Dim sFullNameOfAddin As String, sThisAddinName As String

    sFullNameOfAddin = ThisWorkbook.Path & "\" & "NewAddin.xlam"
    'Add in name of xla
    sThisAddinName = "Add-in Name"

    If Application.Version > 11 Then
        Set oAddin = AddIns.Add(sFullNameOfAddin, True)
        oAddin.Installed = True
        For Each oAddin In Application.AddIns
            If oAddin.Name = sThisAddinName Then
                If oAddin.Installed Then
                    oAddin.Installed = False
                End If
            End If
        Next oAddin
    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...