VBA Fórmula Access para Excel - Microsoft Office - Forum do BABOO
VBA Fórmula Access para Excel
Criado por Vinitol, Jun 21 2012 05:10 PM
Access Excel VBA Macro
Vinitol
Publicado 21 June 2012 - 05:10 PM
Primeiramente é uma honra fazer parte deste fórum.
Tenho um desafio muito interessante que nem o mais experiente desenvolvedor aqui do escritório conseguiu resolver.
Aqui na empresa, temos que enviar diariamente diversos reports em excel para centenas de pessoas. Esses reports possuem várias Pivots Tables com muitas informações. Logo criei uma grande macro no Access que roda todo dia. Ela basicamente faz o seguinte:
- Lê um arquivo de parâmetros, uma tabela do Access, que constam informações como: Nome do Report, Diretório do arquivo, Destinatários, etc.
- Abre o excel
- Atualiza o excel a partir de um txt gerado
- Salva o excel
- Envia o report para os destinatários setados nos parâmetros.
Além disso, a macro faz inúmeros testes, como ver se o arquivo txt está atualizado, se está flegado nos parâmetros para o report ser enviado, se o horário e o dia da semana setados nos parãmetros permitem o report ser enviado, gerar um log enviado por e-mail com todos os report enviados no dia...
O Problema é o seguinte: na tabela do Access de parâmetros, seto o filtro que gostaria de colocar nas pivots. Por exemplo, se na pivot existe um filtro "Mês/Ano" coloco nos paramêtros "06/2012". Só que preciso setar uma fórmula nos parâmetros, algo como "text(now(); "mm/aaaa")" e isso a macro não entende. Ela cola no excel exatamente a fórmula (=text(now(); "mm/aaaa")) e acaba por não resolvê-la. Já foi tentado de tudo e não conseguimos nada.
Agradeceríamos muito a ajuda de vocês
felipebenza
Publicado 21 June 2012 - 09:56 PM
Em primeiro lugar, como você lida com centenas de Pastas de Trabalho, é bom que saiba que não é necessário abrir o Excel para popular uma Pasta de Trabalho. Como você está familiarizado com o Access, sabia que é possível povoar uma Pasta de Trabalho do Excel via consulta SQL (uma instrução INSERT, por exemplo) usando o objeto ADO. Para saber como fazer isso, veja: http://www.ambienteo...ma_conexao_ado/Voltando à questão principal, em resumo, seu problema se encontra na etapa do Excel, ao criar uma determinada fórmula?Considere que ws é uma variável que representa um objeto Worksheet. Experimente usar:
ws.Range("A1").NumberFormat = "mm/yyyy"
ws.Range("A1").Formula = "=TEXT(TODAY(),""mm/aaaa"")"
Alternativamente (o método abaixo insere a data como valor e pode ser que perde-se o vínculo do texto representado na célula a um número de série de data):
ws.Range("A1") = Format(Date, "mm/yyyy")
Editado por felipebenza, 21 June 2012 - 09:56 PM.
Publicado 22 June 2012 - 01:30 PM
Obrigado pelo retorno e pelas dicas.
Na verdade, quando insiro a fórmula diretamente na macro dá certo. Mas ela não deve ir ali.
A fórmula está na tabela do access. Na macro apenas insiro, por exemplo:
vRegistroFields("Data")
Publicado 22 June 2012 - 09:12 PM
Teste, por exemplo, com:Note que a fórmula deve começar com o símbolo de =ws.Range("A1").NumberFormat = vRegistroFields("Data")ws.Range("A1").Formula = "=TEXT(TODAY(),""mm/aaaa"")"
Publicado 25 June 2012 - 03:51 PM
Obrigado, mas não funcionou.
No excel continua aparecendo a fórmula como string, e não calculada.
Publicado 26 June 2012 - 06:13 PM
É porque eu troquei as bolas. Tente novamente:ws.Range("A1").NumberFormat = "mm/yyyy"ws.Range("A1").Formula = "=TEXT(TODAY(),""mm/aaaa"")"