Ir ao conteúdo
  • Cadastre-se

Flávia de Oliveira Batista

Membro Pleno
  • Posts

    31
  • Cadastrado em

  • Última visita

Tudo que Flávia de Oliveira Batista postou

  1. Bom dia, pessoal. Estou com uma problema na execução das minhas macros de VBA com interação com SAP. O SAP que utilizo as vezes cai por inatividade. Teria uma forma de adicionar uma condição ao VBA para retirar a mensagem quando ela aparece? teria que apertar o "Não" ou o "x" do popup. Eu tenho os códigos que abrem as conexões e tal, mas não consigo um pra retirar essa mensagem especifica da tela. o popup abre com o "Sim" pré-selecionado. Teriam alguma solução pra me ajudarem nesse problema? Sou iniciante na utilização do SAP script e ainda não sei muitos recursos de programação.
  2. Boa tarde, pessoal. Estou com uma dúvida em código VBA. poderiam me ajudar, por favor? Desde já agradeço. Tenho necessidade de copiar algumas tabelas do corpo do e-mail do outlook e colar em uma planilha de excel. Achei um código na internet que faz isso de forma muito eficiente, porém a programação é feita a partir do VBA dentro outlook, por assim dizer (abro o e-mail, clico Alt+f11 e aí abre uma tela de VBA, então colo o código e ele copia a tabela pra uma pasta excel). queria saber se tem como fazer a partir do próprio excel, pois quero fazer interação com outras programações que utilizo. Sub ImportTableToExcel() Dim xMailItem As MailItem Dim xTable As Word.Table Dim xDoc As Word.Document Dim xExcel As Excel.Application Dim xWb As Workbook Dim xWs As Worksheet Dim I As Integer Dim xRow As Integer On Error Resume Next Set xExcel = New Excel.Application Set xWb = xExcel.Workbooks.Add xExcel.Visible = True Set xWs = xWb.Sheets(1) xRow = 1 For Each xMailItem In Application.ActiveExplorer.Selection Set xDoc = xMailItem.GetInspector.WordEditor For I = 1 To xDoc.Tables.Count Set xTable = xDoc.Tables(I) xTable.Range.Copy xWs.Paste xRow = xRow + xTable.Rows.Count + 1 xWs.Range("A" & CStr(xRow)).Select Next Next End Sub origem do código
  3. Bom dia, Tenho uma programação em VBA que copia um gráfico e cola como imagem, mas no momento da colagem (não sei porquê) o código cola a imagem com formação diferente do gráfico original. Quando rodo o código apenas apertando o play ele cola errado, mas se rodo no modo depuração total (aquele linha a linha) funciona normalmente. Segue a imagem de como é o GRÁFICO ORIGINAL e como ele fica COLADO COMO IMAGEM PELO VBA, perceba que a formatação dos rótulos de dados está alterada. Alguém saberia dizer o porquê e como resolver este problema? Coloquei o código resumido que estou usando, todas as variáveis estão declaradas anteriormente e têm valor. inclusive essa programação está dentro de um loop que copia e cola muitos gráficos, e só 1 está dando este erro. Desde já agradeço. Workbooks(PlanilhaOrigem).Activate Sheets(AbaOrigem).Select ActiveSheet.ChartObjects(nome).Select ActiveChart.ChartArea.Copy Workbooks(PastaAtual).Activate Sheets(Aba).Activate Range(CelulaDestino).Select ActiveSheet.Pictures.Paste.Select
  4. @Basole Eu consegui fazer um cód que, com os testes que fiz, parece estar atendendo à minha demanda, como não conheço muito bem as funcionalidades do VBA, não sei se tem algum jeito mais fácil e otimizado para fazer. Ao testar com poucas linhas o cálculo é relativamente rápido, porém quando aumentar muito a quantidade de linhas (10000 aprox/ano) talvez fique bastante lento. Num teste a mais que eu fiz, pedi para a rotina escrever em cada linha i verificada da base um status de "OK", e coloquei uma condição para a rotina verificar somente as linhas que ainda não foram verificadas antes, para também não precisar verificar todas as linhas da BASE de novo sempre que for atualizar os resultados (mas essa parte não está no cód abaixo). O cód ficou bem simples, porque só utilizei as lógicas e funções que eu conheço, que se resumem a "IF e "DO" haha. Pode me dar um feedback de como ficou e alguma dica pra otimizar, caso haja? Desde já agradeço. Att Sub teste() Dim i, j, m, n As Integer Sheets("BASE").Select m = Cells(Rows.Count, 1).End(xlUp).Row Sheets("resultados").Select n = Cells(Rows.Count, 1).End(xlUp).Row i = 1 j = 1 Do Until i = m + 1 j = 1 Do Until j = n + 1 If Worksheets("BASE").Cells(i, 1) = Worksheets("resultados").Cells(j, 1) And Worksheets("BASE").Cells(i, 2) = Worksheets("resultados").Cells(j, 2) And Worksheets("BASE").Cells(i, 3) = Worksheets("resultados").Cells(j, 3) Then 'faz todas as verificações, comparando linha i da BASE com cada linha j de resultados: se houver linha igual, sai do loop e pula pra prox linha da base para começar as comparações novamente Exit Do Else j = j + 1 If j > n Then 'ou seja, comparou a linha i de BASE com todas as linhas j de resultados e não encontrou, assim copia e cola a linha i da base na última linha de resultados Sheets("BASE").Select Range(Cells(i, 1), Cells(i, 3)).Select Selection.Copy Sheets("resultados").Select n = Cells(Rows.Count, 1).End(xlUp).Row Cells(n + 1, 1).Select ActiveSheet.Paste Exit Do End If End If Loop i = i + 1 Loop
  5. Bom dia, pessoal! Gostaria da ajuda de vocês para o seguinte problema: Preciso comparar os dados entre duas planilhas do mesmo arquivo de trabalho. Planilha de BASE e Planilha de RESULTADOS. Para isso gostaria de fazer uma rotina de VBA, pois terei que fazer essa comparação várias vezes. Preciso verificar se todos os dados da BASE estão contidos em RESULTADOS. Caso não esteja, preciso copiar a linha da BASE e colar em RESULTADOS. Como no exemplo, as linhas 5, 9 e 10 da BASE não estão em RESULTADOS, então preciso copiar essas linhas para RESULTADOS. Não precisa ser colado na sequência, pode ser na última linha da planilha, o importante é ter todos os dados. Desde já agradeço a ajuda. Exemplo BASE DE DADOS Exemplo RESULTADOS
  6. A programação que está posta atende (e muito bem) o que preciso fazer... Só queria saber se poderia ser mais rápida, copiando além de arquivos individuais uma pasta inteira, por exemplo... Att.
  7. @AnsiC Eu não entendo muito de VBA.. não conheço a rotina que faz isso de forma mais direta, o código que coloquei na minha planilha, foi um que achei na internet e adaptei pra minha necessidade... por isso venho até o blog pedir ajuda ^^'
  8. Boa tarde, pessoal! Tenho uma demanda pra salvar arquivos, gostaria de saber se alguém pode me ajudar: tenho uma pequena programação em VBA, que é utilizada para selecionar um arquivo no computador, copia-lo e salvar num local padrão. O problema é que com esse programa que eu tenho atualmente só consigo selecionar arquivo unitário. Gostaria de saber se posso modificar a programação de maneira que eu consiga copiar e colar pastas inteiras. Esse código seleciona um arquivo para ser aberto: Private Function AbrirArquivo() As String 'PROCEDIMENTO PARA ABRIR O ARQUIVO Dim Filtro As String Dim Titulo_da_Caixa As String Dim Arquivo As Variant Filtro = "todos os arquivos (*.*)," Titulo_da_Caixa = "Selecione o arquivo" ChDrive ("C") ChDir ("C:\") With Application Filename = .GetOpenFilename(Filtro, 3, Titulo_da_Caixa) ChDrive (Left(.DefaultFilePath, 1)) ChDir (.DefaultFilePath) End With If Filename = False Then MsgBox "Nenhum arquivo foi selecionado." Exit Function End If AbrirArquivo = Filename End Function Private Sub CommandButton3_Click() E esse é o botão que eu clico pra escolher o arquivo. ele simplesmente chama a função acima. 'BOTÃO ABRIR ARQUIVO On Error Resume Next txtCaminhoArquivo.Text = AbrirArquivo
  9. @edson luiz branco ,@r0dr1g0_cwb obrigada, gente!! os cód. funcionaram direitinho ^,^
  10. ActiveSheet.Range("$A$1:$H$1").AutoFilter Field:=8, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/30/2018", 1, "2/29/2018", 1, "3/31/2018", 0, _ "12/31/2017", 0, "12/31/2016") Range("A19").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.EntireRow.Delete ActiveSheet.Range("$A$1:$H$694").AutoFilter Field:=8 Boa tarde, gente! Eu tenho uma coluna de data. Onde fica a informação de quando os meus equipamentos entram na manutenção. Eu preciso filtrar todos os que entraram em manutenção no mês vigente e excluir todas as linhas dos equips de outros meses. Gravei uma macro e gerou o cód acima. O problema é que sempre que vou gerar o relatório as datas são diferentes e preciso também gerar todo mês esse relatório. Aquela parte (Criteria2:= Array (1, "1/30/2018", 1,"2/29/2018", 1, "3/31/2018, 0, 12/31/2017, 0, "12/31/216") tem que ser uma variável, né.. pra conseguir filtrar certinho... Então eu precisava que a macro identificasse o mês vigente e filtrasse tudo o que não fosse do mês de forma automática. Como faço para resolver este problema? Desde já agradeço a ajuda. Sds
  11. @Basole Acabei de testar aqui! Funcionou perfeitamente! Outra coisa... Fui colocar o mesmo range em outra parte, mas não funcionou.. Na verdade é uma classificação: Com o mesmo "LR" acima preciso fazer duas classificações em cadeia. Gravei a macro daquela classificação personalizada, que cria níveis de classificação. Saiu esse codigo ai: *Quando troco o ("$A$1:$I$1692") por (.Cells(1, 1), .Cells(LR, LC)), e nas outras classificações também tenho que mudar ("$A$2:$A$1692") por (.Cells(2, 1), .Cells(LR, 1)) e ("$B$2:$B$1692") por (.Cells(2, 2), .Cells(LR, 2)) ActiveSheet.Range("$A$1:$I$1692").AutoFilter Field:=1 ActiveWorkbook.Worksheets("APRV").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("APRV").AutoFilter.Sort.SortFields.Add Key:=Range( _ "A2:A1692"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal ActiveWorkbook.Worksheets("APRV").AutoFilter.Sort.SortFields.Add Key:=Range( _ "B2:B1692"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("APRV").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Preciso, depois de excluir as linhas como foi feito com seu código, classificar as linhas que sobraram. Classificação na primeira coluna de A a Z e a classificação secundária na segunda coluna do mais antigo pro mais novo (coluna de data). Só que aparece o erro: Referência inválida ou não qualificada. É possível colocar range variável também nessas classificações?
  12. boa tarde, pessoal! Preciso da ajuda de vocês. Tenho uma planilha onde preciso sempre fazer um filtro de cor de linha (dentre várias outras ações que também estou programando). Na planilha eu tenho linhas amarelas e brancas O que eu preciso fazer é: 1- filtrar somente o que é amarelo 2- apagar as linhas amarelas 3- retirar o filtro (para voltar a aparecer as linhas brancas) Gravei uma macro pra fazer esse processo, o código gravado foi esse aqui: ActiveSheet.Range("$A$1:$I$2680").AutoFilter Field:=1, Criteria1:=RGB(255, _ 255, 204), Operator:=xlFilterCellColor ActiveWindow.SmallScroll Down:=-12 Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.EntireRow.Delete ActiveSheet.Range("$A$1:$AF$1691").AutoFilter Field:=1 o problema é que na macro é gravado o range da planilha (nesse caso ficou "$A$1:$I$2680" ). eu preciso que a própria programação defina antes qual o range do filtro, pois as planilhas têm tamanho variado. e depois na hora de retirar o filtro ela faz a mesma coisa colocando também o novo range depois da exclusao das linha (depois o range é "$A$1:$AF$1691" ) Como faço para resolver essa situação? *-*
  13. @Basole, funcionou perfeitamente!! Agora só aparecem resultados únicos na pesquisa ^.^ \o/ Mais uma vez obrigada pela ajuda *-*
  14. Private Sub ProcuraPersonalizada(ByVal Pesquisa As String) Dim Busca As Range Dim Primeiro As String Dim Resultados, ABA As String ABA = ComboBox1.Text 'Executa a busca With Worksheets(ABA).Range("A:G") Set Busca = .Find(What:=Pesquisa, AFTER:=Range("A1"), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 'Caso tenha encontrado alguma ocorrência... If Not Busca Is Nothing Then Primeiro = Busca.Address Resultados = Busca.Row 'Lista o primeiro resultado na variavel 'Neste loop, pesquisa todas as próximas ocorrências para 'o termo pesquisado Do Set Busca = Cells.FindNext(AFTER:=Busca) 'Condicional para não listar o primeiro resultado 'pois já foi listado acima If Not Busca.Address Like Primeiro Then Resultados = Resultados & ";" & Busca.Row End If Loop Until Busca.Address Like Primeiro MatrizResultados = Split(Resultados, ";") 'Atualiza dados iniciais no formulário SpinButton1.Max = UBound(MatrizResultados) 'Valor maximo do seletor de registros 'habilita o seletor de registro SpinButton1.Enabled = True 'indicador do seletor de registros Label_Registros_Contador.Caption = "1 de " & UBound(MatrizResultados) + 1 'Resultados encontrados NOME = Cells(MatrizResultados(0), 4).Value strFile = Right(NOME, Len(NOME) - InStrRev(NOME, "\")) TextBox1.Text = strFile 'nome TextBox3.Text = Cells(MatrizResultados(0), 2).Value 'autor TextBox4.Text = Cells(MatrizResultados(0), 3).Value 'data TextBox5.Text = Cells(MatrizResultados(0), 4).Value 'endereço TextBox6.Text = Cells(MatrizResultados(0), 1).Value 'extensão Else 'Caso nada tenha sido encontrado, exibe mensagem informativa SpinButton1.Enabled = False 'desabilita o seletor de registros Label_Registros_Contador.Caption = "" 'zera os resultados encontrados 'limpa os campos do formulário TextBox1.Text = "" TextBox5.Text = "" TextBox3.Text = "" TextBox4.Text = "" MsgBox "Nenhum resultado para '" & Pesquisa & "' foi encontrado." End If End With End Sub @Basole Só mais uma coisa (acho que é a última dúvida) rs ^^ Adaptei um cód de busca pra usar... Uma limitação é que se a "Pesquisa" for encontrada em colunas diferentes da mesma linha, esta linha aparece várias vezes como resultado... se tiver a mesma palavra procurada nas 6 colunas, o mesmo resultado é listado as 6 vezes... Queria saber se tem como remover essas duplicatas do array de resultados pra que cada resultado aparece somente uma vez.
  15. @Basole Todos os códigos funcionaram perfeitamente!! Obrigada pela atenção e pela ajuda hahah!! Seu conhecimento é fantástico! Parabéns ^.^
  16. @Basole Agora está salvando todas as abas, mas tem realmente o problema do tamanho das colunas o comando que voce colocou: With apXLS.ActiveSheet.PageSetup .FitToPagesWide = 1 .FitToPagesTall = False End With Não seria pra ajustar toas as colunas em uma folha só?... quando gravamos uma macro de impressão ele aparece também como o ajuste de todas as colunas na folha... Por que nesse caso não funciona?
  17. @Basoleposso usar o comando: N = ThisWorkbook.Sheets.Count Set shXLS = apXLS.Worksheets(N) Pra sempre saber quantas abas a planilha tem e salvar todas elas..
  18. @Basole Nossa são muitos comandos diferentes, tem bastante diferença de um pra outro afinal... Os três deram certinho. A limitação do caso do excel é que só salva a primeira aba hahah.. mas deu certo também. Vou fazer as adaptações no código aqui.. Ficou ótimo! Mais uma vez, muito obrigada pela ajuda!! ^.^
  19. @Basole tem como fazer essa mesma programação pra salvar arquivos em excel? Ai eu limito o salvamento de PDF pra esses 3 formatos.. e se tiver outro formato, salva normal mesmo, sem ser em PDF..
  20. @Basole *--* Funcionou perfeitamente.. pra estender para os outros formatos (apresentação e planilha), posso fazer somente as alteraçoes abaixo, ou seria necessário mais algum comando? "Word.Application" para "PowerPoint.Application" ou "Excel.Application" oDoc.Documents.Open para oDoc.Presentation.Open ou oDoc.Workbook.Open oDoc.ActiveDocument para oDoc.ActivePresentation ou oDoc.ActiveWorkbook
  21. @Basole eu preciso salvar arquivos de word, excel e power point em PDF. a programação já está identificando a extensão dos arquivos quando o usuário seleciona o mesmo. é possível fazer uma macro para abrir o arquivo e usar o "salvar como" para esses tipos de arquivos?
  22. @Basole , está aí o arquivo. O problema do salvamento em PDF que comentei... É na programação do formulário (CADASTRO). As partes do código estão com comentários pra facilitar a leitura. O código que estou enviando está um pouco enxugado, eu retirei uma parte pra facilitar, mas o que retire não interfere. O que está dando erro é a parte de salvar em PDF, como disse.. o PDF salvo não abre =\ Só um adendo... li a pouco algo sobre extensões e formatos de arquivos.. Entendi que se eu mudo somente a extensão do arquivo (tirar doc e colocar pdf, por exemplo) ele pode se tornar inutilizável, como está acontecendo, pois quando "salvo em PDF" apenas tiro a extensão original do nome do arquivo e coloco ".pdf" mudando assim a extensão... Mas para o arquivo abrir corretamente seria necessário não só mudar a extensão, mas também o formato do arquivo. Ai fiquei mais sem saber ainda kkkk porque não sei se dá pra fazer isso via VBA. BANCO DE DADOS TÉCNICO - flávia batista.zip Fui no windows explorer e ativei a visualização das extensões de arquivos. ai tentei mudar a extensão de um doc e apareceu a mensagem: Eu não sei se é uma solução possível: o usuário selecionar um arquivo qualquer. ai o VBA abre esse arquivo usa a ferramenta "salvar como" ai salva na pasta padrão e com formato pdf...
  23. @basole como faço pra anexar a planilha? nao estou conseguindo.. parece que o formato dela não carrega aqui. a minha planilha é do tipo: "planilha habilitada para macros no office excel xlsm"..

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!