Ir ao conteúdo
  • Cadastre-se

Edson Luiz Branco

Membro Pleno
  • Posts

    844
  • Cadastrado em

  • Última visita

Tudo que Edson Luiz Branco postou

  1. Fazendo uma analogia coloquial, seria como dizer que "...nunca comi um pão feito em padaria, sempre fiz meus próprios pães em casa... mas dizem que a Panificadora do Zé faz um pão 'da hora'" hehehe. Então não saberia lhe orientar sobre isso... mas há bons canais no YT sobre VBA para iniciantes, como o da Hashtag Treinamentos, o da VBA Academy, o do Tomás Vasquez... enfim.
  2. Parabéns pela iniciativa de estudar VBA... e já que você está nessa vibe, vamos dando nomes corretos aos bois? você gostaria de uma maneira, via VBA, de listar, para todos os objetos do Excel (e os do próprio VBA/VBE etc.), todos os seus métodos, suas propriedades, seus eventos, suas constantes tipadas/enumeradas... é isso? Olha, desconheço uma maneira de fazer isso ser listado via código. Mas dentro do editor do VBA, você pode a qualquer momento verificar a estrutura do Modelo de Objetos atravé do Pesquisador de Objetos, teclando F2: Outra maneira, embora rudimentar, seria exibir o Help online de um dos tópicos e analisar a árvore do lado esquerdo do navegador: A listagem que você fez em seu exemplo, usando a função do VBA (do VBA mesmo, não do Excel) a VBA.Environ não lista recursos nem comandos. Lista apenas Variáveis de Ambiente do Windows, uma simples String.
  3. Há duas linhas sobrando aí, @magnosalmeida. A que está End Select pode eliminar sem preocupação. Agora, entre a linha que está em amarelo (Sub AtualizarTodaPlanilha()) e a da linha seguinte (Private Sub Worksheet_Activate()) qual delas está sobrando depende de onde ela está (se num módulo comum ou num módulo de planilha) e de qual a forma de você disparar a macro: a primeira é disparada por você, seja através de algum botão ou de atalho de teclado ou via menu. A segunda é disparada quando uma determinada planilha (a que contém o código) é Ativada.
  4. Boa noite, @daviddatal você quer dizer na Barra de Tarefas do Windows, correto? Se sim, clique com o botão direito em qualquer espaço vazio da Barra de Tarefas do Windows, escolha "Configurações da Barra de Tarefas" e na caixa "Combinar botões da barra de tarefas" escolha a opção "Nunca".
  5. Os memorandos são baseados em Modelo (.dotx ou .dotm)? Ou é a velha técnica de pegar o último, limpar tudo e digitar por cima mudando os campos? Consegue anexar o arquivo e tb qual a pasta que será salvo o pdf? (se for com macro tem que zipar antes pra anexar aqui)
  6. Entendi. É só pros memorandos, correto? E esses memorandos têm algo que os diferencie de outros tipos de documento, como uma numeração especial ou um texto específico? Ou, se não precisar ser totalmente automático, talvez um botão na faixa de opções pra convertê-lo a pdf...
  7. Bom dia, @Jmbs O Word (assim como os outros apps Office) já oferecem a possibilidade de salvar backups, é só ativar esta opção em Arquivo > Opções > Avançado > na seção "Salvar", selecione "Criar sempre backup". Isso já não lhe atenderia?
  8. Anexe seu arquivo @fradseu, pra podermos entender o que está acontecendo.
  9. Olá, @rita82 Uma forma de fazer seria abrindo normalmente seu CSV numa planilha e usar uma fórmula para extrair a data. Digamos que você tenha importado essas linhas todas para a coluna A e que na primeira linha (célula A1) esteja o cabeçalho da coluna e essas cadeias iniciem então na A2. Na célula B2 você poderia introduzir a fórmula abaixo depois arrastar para o resto da coluna B. Por último formate a coluna B para exibir corretamente as datas. =DATA.VALOR(ESQUERDA(A2;10)) Outra maneira é transformar o intervalo numa Tabela e usar o Power Query. E ainda uma terceira, se for um trabalho repetitivo, fazer uma macro.
  10. Boa tarde, @AlexAltheman, @Muca Costa O problema é que agora acho que já não dá mais pra fazer nada pois seus números já perderam definitivamente os demais dígitos. você terá que buscar novamente na fonte original e importá-los como texto, não como número, pois o Excel só trabalha com números com no máximo 15 algarismos significativos.
  11. O SOMASES de fato faz essa função, mas de uma em uma planilha. Tanto que você nem precisaria ter usado o SOMASES. Poderia ter usado o SOMASE mesmo (singular), visto só ter um par Intervalo de Critério/Critério em cada planilha. Vai retornar um SOMASE(S) de cada Planilha. Por isso que é necessário, ao final, somá-las (é uma soma de um Array dentro da soma de outro Array). Pra usar o SOMASE, seria só alterar a posição dos parâmetros: =SOMA(SOMASE(INDIRETO("'"&Planilhas&"'!A5:A100");$A2;INDIRETO("'"&Planilhas&"'!AB5:AB100")))
  12. Boa tarde, @ppeterk Função INDIRETOS (plural)? Acho que você quis usar a função INDIRETO e acabou cometendo algum erro de digitação, suponho. Além disso, lembre-se que quaisquer fórmulas que retornem resultado de referências 3D de intervalos sempre retornam matrizes, portanto no seu caso ainda teria que fazer uma soma desse retorno e, logicamente, se seu Excel não for o do Microsoft 365 em diante finalizar com CTRL SHIFT ENTER. Pra manter sua linha de raciocínio, sugiro na N2: =SOMA(SOMASES(INDIRETO("'"&Planilhas&"'!AB5:AB100");INDIRETO("'"&Planilhas&"'!A5:A100");$A2))
  13. Que bom que pude ajudá-la! Se o problema foi resolvido, favor fechar o tópico aceitando dentre as respostas a que mais influência teve na solução do problema (lado esquerdo). Sucesso pra ti tb!
  14. ??? Se essa outra aba a que você se refere é alguma nova aba cujo nome seja algo como "Macro1" é porque ao invés de você teclar ALT F11 você teclou talvez distraidamente CTRL F11. Sim, essa é uma outra técnica também válida, mas tem de ir de planilha em planilha e fazer o procedimento. E como seu arquivo tem 52 planilhas, achei mais produtivo fazer via VBA. Mas tá valendo tb!
  15. Antes de iniciar, uma observação: como são muitos objetos, dependendo da configuração de sua máquina pode demorar bastante e você pode pensar que o Excel travou. Portanto, faça o procedimento quando não precisar usar o Excel por uns minutos. Estando no Excel, tecle ALT + F11 - Isso exibirá o editor do Visual Basic for Applications. No VBA, vá no menu Inserir > Módulo. Na janela em branco no novo módulo, copie e cole o código abaixo. Tecle F5 para executá-lo. Sub EliminaFiguras() Dim ws As Worksheet, i As Long Application.ScreenUpdating = False For Each ws In ActiveWorkbook.Worksheets If ws.Shapes.Count > 2 Then i = i + ws.Shapes.Count ws.DrawingObjects.Delete End If Next ws Application.ScreenUpdating = True MsgBox i & " figuras eliminadas. Salve seu arquivo.", vbOKOnly End Sub P.S.: Elimine a macro antes de salvar ou responda Sim quando salvar assim que o Excel exibir a mensagem pra salvar sem macro.
  16. Boa tarde, @Malu Vilas Boas Fernandes . Seja bem vinda ao fórum. você copiou/colou o conteúdo da internet ou de outro aplicativo? O maior problema parece estar na planilha "Conta Corrente". Só nela existem 60.325 formas/figuras! Muitas são cópias (algumas espelhadas) da figura "Rio Prefeitura..." que está no cabeçalho. Outras são figuras transparentes ou com largura zero, mas se você passar o mouse lentamente no intervalo de algumas células, digamos a C187 por exemplo, notará que ali existe algum objeto. Se você observar, na guia "Página Inicial" > grupo "Edição" > botão "Localizar e Selecionar" (lupa), escolhendo "Painel de Seleção..." perceberá a infinidade de objetos que ali existem. Outras planilhas que também têm muitos, embora menos, são as de nome "Execução do Objeto MMM-21" (em torno de 222 figuras), as de "Conform. da Despesa..." e "Conciliação..." com aprox. 26 e 9 formas, respectivamente. O método mais fácil pra eliminar seria através do VBA. Por exemplo, o comando ActiveSheet.DrawingObjects.Delete apagaria todas as figuras que estão na planilha ativa. Entretanto, apagaria também as duas figuras do Logo no cabeçalho. Se não houver problema em usar dessa forma, você pode copiar de uma das outras planilhas da pasta essas duas figuras de volta às suas posições. Outra forma, embora mais demorada, seria também pelo VBA fazer um loop pelas figuras e, não sendo essas duas, deleta de uma em uma.
  17. Bem vindo ao Clube do Hardware, @JoséCarlos1! Pode ser que seu arquivo esteja apenas com a extensão trocada. Se não houver informações confidenciais ou problemas como violação de direitos autorais, anexe esse arquivo aqui pra que possamos melhor avaliar.
  18. Bem vinda ao fórum, @Gesiane Diniz ! Se entendi direito, A1 tem que ter número e além disso tem que ser maior que zero para que você possa alimentar alguma coisa em C1, correto? Isso vale também para C2 em relação a A2, etc. Se for isso, use uma regra de Validação de Dados: Em sua planilha, selecione a célula C2 Guia Dados > grupo Ferramentas de Dados > Validação de Dados Na caixa de diálogo que abre, na guia Configurações, sob Permitir escolha Personalizado Sob Fórmula, digite: =E(ÉNÚM($A2);$A2>0) Na mesma janela, agora na aba Alerta de erro, preencha se quiser informar ao usuário quando entrar com dado inválido: Marque a opção Mostrar alerta de erro após a inserção de dados inválidos Sob Estilo, escolha Parar Em Título, dê um título para a popup que abrirá na tela ao errar. Digamos "Entrada Inválida" Sob Mensagem de erro, digite algo que informe o porquê do erro. Digamos "O Valor da Coluna A deve ser um número maior que zero". Dê OK Agora copie a célula C2 para a área de transferência e cole somente a validação para as demais células: Selecione o intervalo C3 até C5 Clique com o botão direito sobre a seleção e escolha Colar Especial e escolha a opção Validação.
  19. A função Val que você está usando é muito limitada e não consegue transformar, por exemplo, a string "111.111.111-11" da TextBox no número puro 11111111111 conforme conteúdo real da célula (Range.Value) da sua planilha. Você teria que antes eliminar o ponto e o hífen do texto com Replace. Entretanto, a meu ver, o mais simples nesse caso seria comparar a TextBox com o conteúdo da célula como está formatado usando a propriedade Range.Text ao invés de Range.Value, eliminando também a função Val. Ficaria assim: If Cells(lin, 5).Text = TextBoxCPF.Value Then 'verificar duplicidade cpf _________________ Uma dica: você poderia reduzir significativamente seu código se ao invés de usar referência de intervalos aproveitar - já que seus dados estão em uma tabela - as referências de tabela. Por exemplo, o trecho de nomes duplicados poderia ficar simplesmente assim: ... If Application.CountIf([Tabela_CADASTRO[NOME]], Me.TextBoxNOME.Value) > 0 Then MsgBox "Este nome já está cadastrado", vbInformation, "Cadastro já existente!" Exit Sub End If
  20. Olá, @fradseu Algo de errado não está certo... rsrsrs: não vi nenhuma soma, nenhum sinal de adição em sua fórmula. Tente alterá-la para algo como: =SeErro(Procv();0) + SeErro(Procv();0) + SeErro(Procv();0)
  21. Bem vindo ao fórum, @Jardel Santana! Qual erro está ocorrendo e em qual linha? É uma mala direta que você está imprimindo ou um documento qualquer de x em x págs? Se for mala direta, lembre-se de mesclar o documento num só antes de rodá-la, como dito no primeiro post. Detalhe o que e como você está tentando fazer, preferencialmente anexe seu(s) arquivo(s) aqui (elimine ou distorça informações confidenciais, se existir). Zipe antes os arquivos, se tiverem macro, senão o robô do site não aceita. Se você está usando o último código que postei, lembre-se de alterar o caminho onde ficarão os pdf's na constante "Caminho" (a pasta já deve existir em seu PC). Também altere de quantas em quantas páginas você quer imprimir na constante "BlocoPágs".
  22. Bom dia, @JrPaulino Pra não ter de "reinventar a roda", você pode usar o Controle de Conteúdo tipo Selecionador de Data que o próprio Word oferece em suas ferramentas (grupo Controles da guia Desenvolvedor). Entretanto, se seu objetivo é usar mesmo um do tipo ComboBox, ele também está disponível com o nome de Caixa de Combinação. Outra possibilidade é usar para o primeiro um Controle ActiveX tipo Date & Time Picker ou ainda o Month View e para o segundo um Controle de Formulário herdado (legado) ou um ActiveX tipo ComboBox padrão. Os ActiveX são um tanto mais instáveis em relação à compatibilidade 32x64 bits e os controles têm de estar previamente registrados pra funcionarem (exceção para o ActiveX ComboBox onipresente nos pacotes Office, independente de versão), embora deem mais poder se for programá-los ou formatá-los. Quanto ao controle Caixa de Combinação herdado, funciona bem no Word mas é bem limitado (aceita somente até 25 entradas) e o documento precisa estar com Restrição de Edição tipo Preenchendo Formulários para mostrar a cortina. Anexo um rascunho com alguns desses controles. Exemplos Controles Data e DropDown (EdsonBR).docx
  23. Bom dia, @Jefferson TS Quando você usa a expressão "tabela", você está se referindo a um objeto tabela mesmo (no VBA = ListObject) ou a um simples intervalo de células? Caso seja uma tabela, poderia usar: Sub EliminaÚltimaLinhaDados() With ActiveSheet.ListObjects(1) If Not .DataBodyRange Is Nothing Then .ListRows(.ListRows.Count).Range.Delete xlShiftUp End With End Sub Se for baseado em intervalo, como pelo jeito você já encontrou a última linha que é a dos totais (usou .End(xlDown)), pode usar o Offset com o valor negativo (.End(xlDown).Offset(-1,0)) para se referir à linha imediatamente anterior à dos totais.
  24. @BiaMidori, pra analisar erro fica complicado quando o código é passado incompleto. Mas pelo fragmento que você postou, provavelmente deve ter acontecido de o método Find não ter encontrado o texto procurado. Então ao invés de um Range retorna Nothing, e Nothing não tem propriedade Row. Nesse caso sempre teste se o objeto não está vazio antes de prosseguir: Set tblFornecedor3 = Planilha2.Range("FORNECEDOR").Find(what:=e, lookat:=xlPart) If Not tblFornecedor3 Is Nothing Then If e = Planilha2.Cells(tblFornecedor3.Row, 4).Value Then ... ... End If End If Outra hipótese numa passada rápida de olhos sobre seu código é que você pode não ter fechado o primeiro If Then/Else com o End If correspondente ou o With com o End With... Enfim....
  25. Bom dia, @BiaMidori Esse é um erro de diagnóstico geralmente difícil e tem a ver com Userforms versus criação de novos objetos (.Add), sejam eles controles, shapes, etc. Não tinha visto acontecer ainda com simples adição de linha em ListObject. Tente contornar o problema ativando a planilha imediatamente antes de começar a adicionar a linha. Se possível, anexe seu modelo problemático para darmos uma olhada... ____________ P.S.: ia me esquecendo: outra coisa que recomendo principalmente em códigos mais extensos e com sucessivas edições/reedições é fazer uma faxina de vez em quando indo no núcleo do código no arquivo, usando a antiga e bem conhecida ferramenta "Excel VBA Code Cleaner" do Rob Bovey. Ela é um suplemento gratuito para o VBA e após instalada fica disponível no menu Ferramentas>Clean Project do VBE. Infelizmente só está disponível para o Office instalado na versão 32bits. você encontra ela no site oficial em: Excel VBA Code Cleaner

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!