Jump to content

Ganhe $$$ escrevendo tutoriais para nós!


Foto

VBA Fórmula Access para Excel

Access Excel VBA Macro




  • Faça login para responder
5 respostas neste tópico

#1 Vinitol

Vinitol
  • Participante
  • 3 mensagens

Publicado 21 June 2012 - 05:10 PM

Boa tarde a todos.

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

Abraços!




#2 felipebenza

felipebenza
  • Participante
  • 61 mensagens

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").NumberFormat = "mm/yyyy"
	ws.Range("A1") = Format(Date, "mm/yyyy")

Editado por felipebenza, 21 June 2012 - 09:56 PM.
''


#3 Vinitol

Vinitol
  • Participante
  • 3 mensagens

Publicado 22 June 2012 - 01:30 PM

Felipe, boa tarde!

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")

Abraços

#4 felipebenza

felipebenza
  • Participante
  • 61 mensagens

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"")"

#5 Vinitol

Vinitol
  • Participante
  • 3 mensagens

Publicado 25 June 2012 - 03:51 PM

Felipe

Obrigado, mas não funcionou.

No excel continua aparecendo a fórmula como string, e não calculada.

#6 felipebenza

felipebenza
  • Participante
  • 61 mensagens

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"")"






Tópicos Relacionados Collapse


Tópicos com palavra-chave: Access, Excel, VBA, Macro





Ganhe $$$ escrevendo tutoriais para nós!