Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#65993
Tudo beleza pessoal?

Estou com uma dúvida referente à programação de macros e vou tentar explicar para vocês – vai ser um texto meio extenso.
Eu tenho essas três figuras pretas, na qual pretendo adicionar macros gravadas dentro delas, ou seja, essas figuras pretas serão botões:

Imagem

Agora vou explicar o botão configuração 1. Quando eu clicar no botão configuração 1, ele escreverá o nome de três macros já feitas em determinadas células - que estarão ocultas depois que a planilha inteira estiver pronta - e executará logo em seguida a macro_que_copia_e_cola_nos_botoes:

Imagem

A macro_que_copia_e_cola_nos_botoes copiará o nome das macros que o botão Configuração 1 escreveu e colará dentro dos botões pretos – em atribuir macro quando clicado com o botão direito nos botões pretos - localizados nas células C5; E5 e G5. Assim:
    A macroA é uma macro que escreve “A” dentro da célula C5 e será adicionada dentro do botão que se encontra na célula C5;
      A macroB é uma macro que escreve “B” dentro da célula E5 e será adicionada dentro do botão que se encontra na célula E5;
        A macroC é uma macro que escreve “C” dentro da célula G5 e será adicionada dentro do botão que se encontra na célula G5;

        Dessa forma, basta eu clicar no botão Configuração 1 que as minhas figuras pretas estarão com macros dentro delas, se transformando assim em botões:

        Imagem

        Até então, a minha macro funcionou perfeitamente, como era para ser executada.

        O problema acontece quando eu aperto o botão Configuração 2. Esse botão Configuração 2, escreverá no mesmo campo onde foi escrito a macroA; macroB e macroC outros nomes de macros e executará a macro_que_copia_e_cola_nos_botoes:

        Imagem

        Porém, quando eu clico em qualquer um dos botões pretos, que é pra escrever as letras D, E e F; eles escreverão a letra A, B e C.

        Isso acontece, pois quando foi gravada a macro_que_copia_e_cola_nos_botoes, ela copiou o nome macroA, macroB e macroC ao invés DO CONTEÚDO de dentro da célula.

        Eu queria saber se vocês sabem programar a macro_que_copia_e_cola_nos_botoes de forma que ela copia o conteúdo que estará dentro das células, adicionando-os dentro dos botões pretos, pois, não importará o nome da macro que eu colocar ali, ela estará adicionando nos botões pretos, desde que seja uma macro já existente.

        Isso precisa ser executado dessa forma, pois toda a planilha que eu fiz é com base nesse “jogo” de clicar nos botões configuração 1 e configuração 2 e eles mudarem as macros dos botões pretos, mediante a macro_que_copia_e_cola_nos_botoes.

        PS.: eu também preciso que a macro_que_copia_e_cola_nos_botoes copie o nome das macros não com base na posição das células que elas ocupam (C8, E8 e G8), mas sim, com base na distância que essas células estão da célula macro_que_copia_e_cola_nos_botoes. Isso fará com que uma única referência (célula I8) seja usada para calcular a distância de onde ela deve selecionar e copiar e eu terei um código de macro “genérico”, bastando mudar a referência de onde ele deverá copiar (ou seja, a célula I8), pois pretendo criar vários desses botões macro_que_copia_e_cola_nos_botoes em diferentes regiões da planilha que estou trabalhando, sempre colando independente de onde estiver escrito o nome das macros nos botões pretos.

        Muito obrigado se vocês leram o texto até fim, ficou bem extenso mas quis explicar detalhadamente com imagens para a melhor compreensão. Se vocês tiverem qualquer dúvida, irei responder prontamente!
        #65994
        Sullivan2021 escreveu: 26 Jul 2021 às 12:50 Eu queria saber se vocês sabem programar ... de forma que ... o conteúdo que estará dentro das células, adicionando-os dentro dos botões ...
        Olá, @Sullivan2021 .
        Eu não sei como colocar uma macro dentro de um botão, agora se você quiser atribuir uma macro a um botão, então veja se aproveita o código abaixo.
        Código: Selecionar todos
        Sub AtribuiMacroAoBotão()
         ActiveSheet.Shapes("Botão 1").OnAction = Range("C8").Value
        End Sub
        
        #
        Esse código irá atribuir ao Botão 1 a macro cujo nome esteja em C8.

        Quanto à segunda demanda (PS.: eu também preciso ...) eu não entendi o que você quer.
        Sullivan2021 agradeceu por isso
        #66004
        Obrigado pela resposta e pela atenção @osvaldomp funcionou perfeitamente!
        Quanto a segunda dúvida, eu queria encontrar uma forma de copiar o conteúdo da célula C8 até G8, sem necessariamente escrever (C8:G8) no código da macro; pois quero criar um código que entenda que deve copiar somente a partir da célula C8.
        Então seria algo mais ou menos “copiar 4 células à direita a partir de C8” sem especificar essas células, a única referência é a célula C8. Dessa forma, vai ficar muito mais fácil se eu tiver que executar o mesmo código numa outra parte da planilha e precisar alterar. Digamos que eu queira que o código seja executado na célula H8, bastaria eu abrir o editor da macro e mudar de C8 para H8 sem ter que mudar todas as células que é pra copiar e colar, uma vez que o código entenderia que a partir da célula H8 ele precisa copiar mais 4 células à direita. Facilitaria muito o trabalho de ficar mudando célula por célula na mão no código caso quisesse executar numa outra região da planilha e não correria o risco de errar alguma coisa.
        Ainda, seguindo essa mesma linha de raciocínio, teria também como fazer o código entender que é para copiar "a 5ª célula a direita de C8"? Nesse caso, ele não copiaria tudo o que está a direita de C8, mas a quinta célula à direita de C8
        #66006
        Agora entendi. Seguem alguns exemplos.

        Loop de C8 até F8
        Código: Selecionar todos
        Sub Loop4DireitaDeC8()
         Dim c As Range
          For Each c In Range("C8").Resize(, 4)
           MsgBox c.Address(0, 0) & vbLf & c.Value
          Next c
        End Sub
        #
        Loop à direita em 4 células a partir da célula selecionada; então para fazer o Loop, por exemplo, em C8:F8 selecione C8 e rode o código.
        Código: Selecionar todos
        Sub Loop4DireitaSeleção()
         Dim c As Range
          For Each c In Selection.Resize(, 4)
           MsgBox c.Address(0, 0) & vbLf & c.Value
          Next c
        End Sub
        #
        Indica endereço e conteúdo da quinta célula à direita de C8, ou seja, de H8.
        Código: Selecionar todos
        Sub QuintaDireitaC8()
         MsgBox Range("C8").Offset(, 5).Address(0, 0) & vbLf & Range("C8").Offset(, 5).Value
        End Sub
        #
        Indica endereço e conteúdo da quinta célula à direita da célula selecionada.
        Código: Selecionar todos
        Sub QuintaDireitaSeleção()
         MsgBox Selection.Offset(, 5).Address(0, 0) & vbLf & Selection.Offset(, 5).Value
        End Sub
        #
        Loop à direita em 4 células a partir da célula indicada em A1; então para fazer o Loop em C8:F8, por exemplo, coloque em A1 ~~~> C8.
        Código: Selecionar todos
        Sub Loop4DireitaConformeA1()
         Dim c As Range
          For Each c In Range(Range("A1").Value).Resize(, 4)
           MsgBox c.Address(0, 0) & vbLf & c.Value
          Next c
        End Sub
        JCabral, Sullivan2021, Bikke agradeceu por isso
        #66014
        Boa tarde Osvaldo

        Mais uma vez top essa explicação, mas na Sub Loop4DireitaConformeA1, está dar-me erro..."Run-time error '1004': Method 'Range' of object '_Global' failed".

        O que estarei a fazer de errado?
        #66017
        Salve, Jorge.

        Segue um arquivo com o código instalado.
        Você não está autorizado a ver ou baixar esse anexo.
        JCabral, Bikke agradeceu por isso
        long long title how many chars? lets see 123 ok more? yes 60

        We have created lots of YouTube videos just so you can achieve [...]

        Another post test yes yes yes or no, maybe ni? :-/

        The best flat phpBB theme around. Period. Fine craftmanship and [...]

        Do you need a super MOD? Well here it is. chew on this

        All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

        Lasagna on me this time ok? I got plenty of cash

        this should be fantastic. but what about links,images, bbcodes etc etc? [...]

        Estamos migrando para uma comunidade no Discord