Приложение Excel не закрывается из MS-Project VBA
Следующий подраздел не закрывает приложение Excel. Он остается в диспетчере задач. Это довольно странно, потому что я использую тот же метод, чтобы открывать и закрывать книги в других модулях, и это работает. Этот код находится в MS-Project.
Sub updateModules() 'TESTE INICIAL PARA SABER SE AS INFORMAÇÕES BÁSICAS ESTÃO INSERIDAS If sanity_test = 0 Then Exit Sub End If '--------------------------------//-------------------------------- Dim xlapp As Object Dim xlbook As Object Dim sHostName As String ' Get Host Name / Get Computer Name sHostName = Environ$("username") Set xlapp = CreateObject("Excel.Application") 'xlapp.Visible = True Set xlbook = xlapp.Workbooks.Open(modulesVBA_loc) 'ENCONTRAR CÓDIGO NA TABELA DO FICHEIRO MASTER Dim rng_modules As Range Dim rng_usernames As Range Dim username As Range Dim atualizado As Range Dim lastcol As Long With xlbook.Worksheets(1) 'Última coluna lastcol = .Cells(2, .Columns.Count).End(xlToLeft).Column lastcol_letter = Functions_mod.GetColumnLetter(lastcol) End With 'Range com os usernames Set rng_usernames = xlbook.Worksheets(1).Range("E2:" & lastcol_letter & "2") 'Encontra o username correto Set username = rng_usernames.Find(sHostName) Set rng_modules = xlbook.Worksheets(1).Range("A3") 'Primeiro módulo Do While rng_modules.Value <> Empty linha = rng_modules.Row Set atualizado = username.Offset(linha - 2) If atualizado.Value = "Not Updated" Then With ThisProject.VBProject .VBComponents.Remove .VBComponents("CoreTeam_mod") .VBComponents.Import supportDoc_loc & "Project\Próxima Actualização - Apenas PP pode modificar\VBA\Modules\CoreTeam_mod.bas" End With atualizado.Value = "Updated" End If Set rng_modules = rng_modules.Offset(1) Loop xlbook.Saved = True xlbook.Close End Sub
EDIT : Кажется, что ошибка исходит от функции, которая получает букву столбца. Я заменил lastcol_letter буквой «G», и код работает нормально и должным образом закрывает приложение Excel. Как написать функцию вместо этого?
Function GetColumnLetter(colNum As Long) As String Dim vArr vArr = Split(Cells(1, colNum).Address(True, False), "$") GetColumnLetter = vArr(0) End Function
- Как импортировать рабочий лист Excel в Microsoft Project?
- Сохранение MS Project и файла MS Excel, синхронизированного с помощью функции импорта MS Project
- Excel VBA - создание имен столбцов с использованием заголовков MS Project
- Excel VBA - код для открытия файла MS Project не работает
- как скопировать данные задач из Microsoft Project Plan в Excel?
- как запустить макрос в другом приложении с помощью vba
- Мне нужно записать имя файла и путь к файлу
- Глобальная переменная потеряет свою стоимость после закрытия проекта.
- VBA для экспорта задач Excel в MS Project
- Не удается прочитать задания MS Project 2013 в Excel 2016 VBA
- VBA Copy Вставить данные в Excel из Project
- Автоматизация создания файлов Microsoft Project из файла excel с n строками
- Ошибка ошибки Runtime (VBA для Excel и MS Project)
для открытия приложения excel вы можете использовать код примерно так:
Dim xlapp as Excel.application Set xlapp = GetObject("", "Excel.Application") ' your other code goes here xlapp.quit End sub
Напишите Application.Quit
в самом конце, который должен закрыть экземпляр.
Ваша функция GetColumnLetter
(в MS Project) использует объект Excel Cells
без ссылки на родительский объект (например, объект GetColumnLetter
таблицы). Когда этот код выполняется изначально в Excel, Excel неявно использует активный лист. Однако MS Project не делает этого с помощью неквалифицированных ссылок Excel.
Лучший способ получить объект Range
вам нужен, – сделать это:
Dim rng_usernames As Range Dim lastcell As Range With xlbook.Worksheets(1) 'Última coluna Set lastcell = .Cells(2, .Columns.Count).End(xlToLeft) 'Range com os usernames Set rng_usernames = .Range("E2", lastcell) End With End Sub
Если Excel все еще запущен после завершения макроса, явно закрывайте и устанавливайте объекты Excel в Nothing в конце вашего макроса.
' close out xlbook.Close SaveChanges:=True xlapp.Quit Set xlbook = Nothing Set xlapp = Nothing
Примечание. Сохраненное свойство « Рабочая книга» указывает, сохранен ли файл. Установка этого параметра в значение «Истина» означает, что вам не будет предложено сохранить изменения, когда файл будет закрыт, а изменения не будут сохранены. Ваш код вносит изменения в файл, который отображает то, что вы действительно хотите сохранить. Рассмотрите возможность использования параметра SaveChanges
метода Workbook Close для явного сохранения изменений или нет.