C # Программный доступ к макросам Excel - PullRequest
5 голосов
/ 15 августа 2011

Я работаю с каталогом файлов Excel, чтобы получить информацию о каждом файле. Я пытаюсь использовать взаимодействие C # Excel для сбора информации о макросах VBA, связанных с некоторыми из этих файлов. Код для этого находится ниже. Проблема в том, что ни один из файлов Excel не имеет программного доступа к макросам. Я могу переключить это вручную на локальные копии файла, но в настоящее время у меня есть доступ только для чтения к каталогу файлов. Можно ли как-то временно изменить настройки программного доступа внутри моего кода (чтобы читать код VBA, не вносить никаких изменений) без разрешения на запись?

Кроме того, я только знаю, как внести изменения в программный доступ вручную (через настройки в каждом файле Excel). Видя, что в конечном итоге мне, возможно, просто понадобится получить права на чтение / запись, есть ли способ сделать это в пакетном процессе, чтобы сэкономить много времени, открывая и закрывая файлы вручную?

        VBA.VBProject project = WorkBook.VBProject;
        VBA.VBComponents VBComponents = project.VBComponents;
        string projectName = project.Name;
        VBA.vbext_ProcKind procedureType = Microsoft.Vbe.Interop.vbext_ProcKind.vbext_pk_Proc;
        VBA.VBComponent vbFunction;

        foreach (Excel.Worksheet sheet in VBComponents)
        {
            vbFunction = sheet as VBA.VBComponent;

            if (vbFunction != null)
            {
                VBA.CodeModule componentCode = vbFunction.CodeModule;
                int componentCodeLines = componentCode.CountOfLines;

                int line = 1;
                while (line < componentCodeLines)
                {
                    //EXAMINE LINE

                    line++;
                }
            }
        }

.

EDIT:

Точное сообщение об ошибке «COMException не обработано - программный доступ к Visual Basic Project не является доверенным».

С тех пор я обнаружил, что получаю другое сообщение об ошибке, если я открываю один из файлов, доступных только для чтения, и изменяю настройку. Я не могу сохранить файл, но если я оставляю его открытым, когда он достигает первого файла .xlsm, он выводит сообщение об ошибке «COMException is nothandled - невозможно выполнить операцию, так как проект защищен».

1 Ответ

4 голосов
/ 16 августа 2011

Параметр «Доверительный доступ к проекту Visual Basic» можно найти в «Инструменты» -> «Макрос» -> «Безопасность» на вкладке «Надежные издатели».(Это для Excel 2003; для 2007 его можно найти в Параметры Excel -> Центр управления безопасностью -> Настройки центра управления безопасностью -> Настройки макроса).

Это настройка приложения Excel ,и применяется ко всем экземплярам Excel, запущенным пользователем с этого момента (независимо от того, запущен ли он вручную или программно).

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

(Вы не можете изменить этот параметр программно - это сделало бы его совершенно бессмысленным).


РЕДАКТИРОВАТЬ: теперь вы получаете другойошибка: «COMException ... проект защищен».

Вы получите эту ошибку, если проект VBA в файле Excel защищен паролем (Свойства проекта, вкладка Защита).В этом случае вам нужно разблокировать проект, прежде чем пытаться его открыть.

Я написал несколько макросов, которые обращаются к коду VBA в защищенном проекте, но в моем случае я делал это одинфайл за раз, поэтому я просто попросил пользователя разблокировать его и повторить попытку.

Я не уверен, возможно ли программно разблокировать проект, если вы знаете пароль (но я довольноконечно, это невозможно, если вы этого не сделаете).

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