Ambientes organizacionais estão, cada vez mais, exigindo eficiência, eficácia e agilidade na realização de suas tarefas operacionais. Como sabemos, projeto é um conjunto de atividades temporárias, realizado por pessoas com o objetivo de produzir um produto, serviço ou resultado exclusivo. Porém, diariamente, lidamos em projetos com atividades temporárias que podem ser do tipo operacionais e destinadas, por exemplo, a reporte de resultados para a alta administração da organização. Essas tarefas podem ser adicionadas no cronograma do projeto como do tipo recorrente, pois ocorre com uma determinada frequência.
A automatização de tarefas dessa natureza torna-se cada vez mais necessária, em virtude da necessidade de agilizar as entregas. Isso pode ser feito por meio da criação de macros construídas através de linguagens de programação. Um exemplo de linguagem é a Visual Basic, desenvolvida para ser utilizada também conjuntamente com aplicativos do pacote Microsoft Office como Word e Excel, além do Microsoft Project, mais conhecida como Project VBA.
Este artigo tem por objetivo demonstrar um estudo de caso no qual um Gerente de Projeto necessita exportar dados do seu arquivo de projeto (.mpp) para um novo arquivo de planilha do Excel (.xlsx). Essa planilha será posteriormente encaminhada para a alta administração, para que a mesma possa acompanhar o andamento do projeto. Para automatizar essa tarefa devemos seguir os passos apresentados abaixo:
CRIANDO UMA MACRO – PROJECT VBA
Abrir o arquivo do cronograma do projeto. Nesse estudo de caso utilizamos o Cronograma – Projeto Montar um Blog.mpp;
Cronograma – Projeto Montar um Blog
Abrir a interface de desenvolvimento do Visual Basic no Project: digitar ALT + F11;
Clicar no arquivo ThisProject (Cronograma – Projeto Montar um Blog.mpp) localizado na janela Project Explorer;
Project Explorer
Importar a biblioteca de funções do Excel. Clique em Tools >> References… e selecione a opção “Microsoft Excel 15.0 Object Library”. Em seguida, clique em OK.
Digitar as instruções abaixo na janela de código (à direita);
Sub ExportarPlanilha()‘Define as variáveis Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim t As Task Dim r As Resource Dim nrPlan As Integer Dim flName As String Dim lin As Integer Dim msg As Integer Dim col As Integer Dim count As Integer‘Inicializa as variáveis nrPlan = InputBox(“Digite o número da planilha que deseja exportar:” + vbCrLf + vbCrLf + _ “1 – Gráfico de Gantt” + vbCrLf + _ “2 – Planilha de Recursos”, “0”) flName = InputBox(“Digite o nome do arquivo a ser gravado:”, “EXPORTAR PLANILHA”, “Planilha1”) Set xlApp = New Excel.Application Workbooks.Add.SaveAs (“C:\TEMP\” + flName + “.xlsx”) Set xlBook = xlApp.Workbooks.Open(“C:\TEMP\” + flName + “.xlsx”) Set xlSheet = xlBook.Worksheets(1) lin = 2 ‘Adiciona as colunas na planilha‘1 – Gráfico de Gantt If nrPlan = 1 ThenCells(1, 1).Value = “ID”Cells(1, 2).Value = “% Concluída”Cells(1, 3).Value = “Nome da tarefa”Cells(1, 4).Value = “Duração”Cells(1, 5).Value = “Início”Cells(1, 6).Value = “Fim”Cells(1, 7).Value = “Predecessoras”Cells(1, 8).Value = “Nome de Recursos” count = 8‘2 – Planilha de Recursos ElseIf nrPlan = 2 ThenCells(1, 1).Value = “ID”Cells(1, 2).Value = “Nome do recurso”Cells(1, 3).Value = “Tipo”Cells(1, 4).Value = “Iniciais”Cells(1, 5).Value = “Unid. máximas”Cells(1, 6).Value = “Taxa padrão”Cells(1, 7).Value = “Taxa h. extra”Cells(1, 8).Value = “Custo/uso”Cells(1, 9).Value = “Acumular”Cells(1, 10).Value = “Calendário” count = 10 End If ‘Formata o cabeçalho For col = 1 To countCells(1, col).Font.Size = 12Cells(1, col).Font.Bold = TrueCells(1, col).Interior.ColorIndex = 50Cells(1, col).Borders(xlEdgeBottom).LineStyle = xlContinuousCells(1, col).Borders(xlEdgeLeft).LineStyle = xlContinuousCells(1, col).Borders(xlEdgeRight).LineStyle = xlContinuousCells(1, col).Borders(xlEdgeTop).LineStyle = xlContinuous Next Cells.Columns.AutoFit‘Adiciona as linhas na planilha ‘1 – Gráfico de Gantt If nrPlan = 1 Then For Each t In ActiveProject.Tasks Cells(lin, 1).Value = t.ID Cells(lin, 2).Value = t.PercentComplete Cells(lin, 3).Value = t.Name Cells(lin, 4).Value = t.Duration Cells(lin, 5).Value = t.Start Cells(lin, 6).Value = t.Finish Cells(lin, 7).Value = t.Predecessors Cells(lin, 8).Value = t.ResourceNames lin = lin + 1 Next t ‘2 – Planilha de Recursos ElseIf nrPlan = 2 Then For Each r In ActiveProject.Resources Cells(lin, 1).Value = r.ID Cells(lin, 2).Value = r.Name If (r.Type = 0) ThenCells(lin, 3).Value = “Trabalho” ElseIf (r.Type = 1) ThenCells(lin, 3).Value = “Material” ElseIf (r.Type = 2) ThenCells(lin, 3).Value = “Custo” End If Cells(lin, 4).Value = r.Initials If (r.MaxUnits <> “”) ThenCells(lin, 5).Value = CStr(r.MaxUnits * 100) + “%” End If Cells(lin, 6).Value = r.StandardRate Cells(lin, 7).Value = r.OvertimeRate Cells(lin, 8).Value = r.CostPerUse If (r.AccrueAt = 1) ThenCells(lin, 9).Value = “Início” ElseIf (r.AccrueAt = 2) ThenCells(lin, 9).Value = “Fim” ElseIf (r.AccrueAt = 3) ThenCells(lin, 9).Value = “Rateado” End If Cells(lin, 10).Value = r.BaseCalendar lin = lin + 1 Next r End If xlBook.Save xlBook.Close Workbooks.Close msg = MsgBox(“Exportação concluída com sucesso!”, vbOKOnly, “EXPORTAR PLANILHA”) xlApp.Visible = True xlApp.Workbooks.Open (“C:\TEMP\” + flName + “.xlsx”)End Sub
Digitar Ctrl + S para salvar o projeto.
Criar a pasta TEMP no drive C:
EXECUTANDO UMA MACRO
Na guia DESENVOLVEDOR, localizada na Faixa de Opções do Microsoft Project, clique no botão “Exibir Macros”. Caso essa guia não esteja disponível, é possível habilitá-la. Para isso assista à vídeo-aula Personalizando a faixa de opções do curso Microsoft Project 2013 desse site e você verá como isso é feito.
Selecione a opção “Este Projeto” na combo que lista os locais de macros;
Selecione a macro “ExportarPlanilha” na lista exibida e clique em “Executar”.
Em seguida defina qual planilha deseja exportar, escolha um nome para o arquivo .xlsx e aguarde o processamento das informações. Ao final será exibida uma mensagem informando a conclusão do processo e posteriormente a planilha com os dados exportados.
Bacharel em Ciência da Computação pela Universidade Federal de Sergipe (UFS) e Pós-Graduado em Gestão de Projetos de Software pela Faculdade de Administração e Negócios de Sergipe (FANESE) e Gestão e Liderança de Pessoas pela Universidade Tiradentes (UNIT). É certificado PMP pelo PMI, ITIL v3 Foundation pelo EXIN e COBIT 5 Foundation pela APMG. Possui experiência de 5 anos nas áreas de Análise e Desenvolvimento de Sistemas do setor público e privado. Atualmente trabalha no Banco do Estado de Sergipe (BANESE), onde já desenvolveu atividades de análise de processos e gerenciamento de projetos no Escritório de Gerenciamento de Demandas, Projetos, pertencentes à Área de Governança de TI. Dentre elas, destacam-se a gestão do projeto de implantação do PMO de TI e suporte no gerenciamento de outros projetos. Atualmente, exerce a função de gerente de projetos no PMO Corporativo do BANESE planejando e executando projetos estratégicos da organização. Ministrou aulas de Sistema de Gerenciamento de Projetos em cursos de MBA da FANESE. É membro do PMI-SE onde já atuou como voluntário em eventos, ministrando curso de Gestão do Tempo em Projetos. É proprietário e articulista do site "Gestão de Projetos Ágeis" www.danielettinger.com, onde divulga trabalhos pessoais na área de Gerenciamento de Projetos e Metodologias Ágeis como artigos, v
Ver todos os posts
14 comentários em “Exportando dados para Excel com Project VBA”
Prezado leitor, por favor seja mais específico, pois você pode ter esquecido de executar algum passo do procedimento descrito no artigo. O procedimento foi executado e validado.
Prezado Nathan, sim. Porém, depende da sua variável de análise. Por exemplo, caso você deseje exportar atividades com data de início inferior ou igual À data atual, ou seja, que deveriam ter iniciado você deve comparar If t.Start <= Date.Now.
Bom dia, gostaria de saber se realizando esse procedimento a planilha do excel será atualizada automaticamente a cada modificação que eu faça no Project.
Eu desenvolvi um estudo de fluxo financeiro no excel com base nas informações do planejamento no project, atualmente eu copio e colo no excel as colunas cada vez que o planejamento sofre alguma alteração, se for possível fazer isso automaticamente eu gostaria.
Prezado Daniel, bom dia! É possível criar este exportador pelo excel? Em resumo, preciso exportar automaticamente (VBA), determinadas atividades do cronograma (mpp) de vários projetos. À medida que eu clique no botão de comando de um projeto, ele faça a leitura dos dados escolhidos deste projeto. Tenho vários cronogramas. Pelo que percebi do código que vc nos indicou, ele só pode ser aplicado no project, em um cronograma específico. Existe algum modo de rodar código VBA para vários cronogramas? Sempre utilizo o VBA para este tipo de necessidade (consolidar dados específicos) no próprio excel ou dados da web, mas nunca precisei para o project e não consigo encontrar solução em minhas buscas. Você consegue me auxiliar? Obrigada.
Prezada Luciana, boa tarde! O código para exportação de dados pode ser salvo no arquivo Global.mpt para que você possa utilizar em qualquer arquivo que abrir no MS Project.
Boa noite! Está dando erro na linha “Workbooks.Add.SaveAs (“C:\TEMP\” + flName + “.xlsx”)” Erro em tempo de execução ‘1004’: O Microsoft Excel não pode acessar o arquivo
Prezado Manoel, boa tarde! Verifique se você tem permissão de acesso ao diretório “C:\TEMP\” e se ele já está criado. Caso contrário edite o local onde vai salvar o arquivo para um diretório onde seu usuário tenha permissão de escrita. Defina um outro nome para o arquivo. Existem vários artigos na internet que te ajudam a lidar com esse problema do Excel.
Boa tarde,
Após a exportação, é possível eu atualizar i formações diversas de outras fontes no Excel e depois exportar essas atualizações para o project novamente?
A partir atualização do excel para é fácil buscando informações de outras fontes, mas a parte de exportar para o project através de macro não é minha praia.
Acredito que uma outra macro para exportar do Excel para o project seja possível, mas não e contarei nenhuma que eu possa utilizar.
Perkins, boa tarde. Para importar dados do Excel para o Project você pode acessar esse link (https://shre.ink/Fe9) da Microsoft que possui todas as orientações necessárias.
ESTA DANDO ERRO
CurtirCurtir
Prezado leitor, por favor seja mais específico, pois você pode ter esquecido de executar algum passo do procedimento descrito no artigo. O procedimento foi executado e validado.
CurtirCurtir
Prezados,
teria como eu exportar para o excel apenas a atividades que devem ser executada no momento? Gerando tipo um lista de atividades diárias?
CurtirCurtir
Prezado Nathan, sim. Porém, depende da sua variável de análise. Por exemplo, caso você deseje exportar atividades com data de início inferior ou igual À data atual, ou seja, que deveriam ter iniciado você deve comparar If t.Start <= Date.Now.
CurtirCurtir
No caso quero exportar atividades inferior ou igual a data atual com %concluída menor que 99%, onde encaixo essa programação no macro?
CurtirCurtir
Dentro do operador de iteração For Each na área para adicionar novas linhas na planilha.
CurtirCurtir
Bom dia, gostaria de saber se realizando esse procedimento a planilha do excel será atualizada automaticamente a cada modificação que eu faça no Project.
Eu desenvolvi um estudo de fluxo financeiro no excel com base nas informações do planejamento no project, atualmente eu copio e colo no excel as colunas cada vez que o planejamento sofre alguma alteração, se for possível fazer isso automaticamente eu gostaria.
CurtirCurtir
Prezado Ariel, as modificações no arquivo do project só poderão ser visualizadas na planilha Excel após uma nova exportação.
CurtirCurtir
Prezado Daniel, bom dia! É possível criar este exportador pelo excel? Em resumo, preciso exportar automaticamente (VBA), determinadas atividades do cronograma (mpp) de vários projetos. À medida que eu clique no botão de comando de um projeto, ele faça a leitura dos dados escolhidos deste projeto. Tenho vários cronogramas. Pelo que percebi do código que vc nos indicou, ele só pode ser aplicado no project, em um cronograma específico. Existe algum modo de rodar código VBA para vários cronogramas? Sempre utilizo o VBA para este tipo de necessidade (consolidar dados específicos) no próprio excel ou dados da web, mas nunca precisei para o project e não consigo encontrar solução em minhas buscas. Você consegue me auxiliar? Obrigada.
CurtirCurtir
Prezada Luciana, boa tarde! O código para exportação de dados pode ser salvo no arquivo Global.mpt para que você possa utilizar em qualquer arquivo que abrir no MS Project.
CurtirCurtir
Boa noite! Está dando erro na linha “Workbooks.Add.SaveAs (“C:\TEMP\” + flName + “.xlsx”)” Erro em tempo de execução ‘1004’: O Microsoft Excel não pode acessar o arquivo
CurtirCurtir
Prezado Manoel, boa tarde! Verifique se você tem permissão de acesso ao diretório “C:\TEMP\” e se ele já está criado. Caso contrário edite o local onde vai salvar o arquivo para um diretório onde seu usuário tenha permissão de escrita. Defina um outro nome para o arquivo. Existem vários artigos na internet que te ajudam a lidar com esse problema do Excel.
CurtirCurtir
Boa tarde,
Após a exportação, é possível eu atualizar i formações diversas de outras fontes no Excel e depois exportar essas atualizações para o project novamente?
A partir atualização do excel para é fácil buscando informações de outras fontes, mas a parte de exportar para o project através de macro não é minha praia.
Acredito que uma outra macro para exportar do Excel para o project seja possível, mas não e contarei nenhuma que eu possa utilizar.
CurtirCurtir
Perkins, boa tarde. Para importar dados do Excel para o Project você pode acessar esse link (https://shre.ink/Fe9) da Microsoft que possui todas as orientações necessárias.
CurtirCurtir