Fernandes20 Posted November 20, 2017 Share Posted November 20, 2017 Boas pessoal, estou trabalhando com macro para aprender um pouco a respeito, a principio tenho conhecimento de algumas linguagens de programação, o que facilita um pouco na lógica, porém todos as linguagens tem suas peculiaridades com isso sempre surge algumas dúvidas quando se esta aprendendo algo diferente. Estou fazendo algo até simples porém o resultado não esta saindo como o esperado, o objetivo da macro seria colorir um número x de células e copiar os valores das mesma para outra células, como na imagem abaixo O problema é que a cada execução, a macro copia os 5 valores iguais sobrescrevendo-os. Os valores corretos para célula Y7:AC7 seria (01 03 06 07 09) . Outro problema é que não consegui limitar em 5 vezes a opção colorir células. Se alguém se dispor a dar um auxilio, isso já me ajudaria e muito. Sub Macro1() Dim i, n n = Cells(7, 14) For i = 1 To n Worksheets("Planilha1").Activate ActiveCell.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .PatternTintAndShade = 0 End With Cells(7, 24 + i).Value = ActiveCell.Value Next i End Sub Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 20, 2017 Share Posted November 20, 2017 5 minutos atrás, Fernandes20 disse: Boas pessoal, estou trabalhando com macro para aprender um pouco a respeito, a principio tenho conhecimento de algumas linguagens de programação, o que facilita um pouco na lógica, porém todos as linguagens tem suas peculiaridades com isso sempre surge algumas dúvidas quando se esta aprendendo algo diferente. Estou fazendo algo até simples porém o resultado não esta saindo como o esperado, o objetivo da macro seria colorir um número x de células e copiar os valores das mesma para outra células, como na imagem abaixo O problema é que a cada execução, a macro copia os 5 valores iguais sobrescrevendo-os. Os valores corretos para célula Y7:AC7 seria (01 03 06 07 09) . Outro problema é que não consegui limitar em 5 vezes a opção colorir células. Se alguém se dispor a dar um auxilio, isso já me ajudaria e muito. Sub Macro1() Dim i, n n = Cells(7, 14) For i = 1 To n Worksheets("Planilha1").Activate ActiveCell.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .PatternTintAndShade = 0 End With Cells(7, 24 + i).Value = ActiveCell.Value Next i End Sub é só vc esquecer as funções basicas do excel e pensa na planilha como um array bidimencional então vc passa da planilha para um array , trabalha o array e passa de volta para a planilha formate sua planilha previamente e cole apenas valores array1=range(range que quer pegar).value2 for array2(L2,C2)=array1(L1,C1) next range(range que quer colar).value2=array2 cara eu nunca lembro como escreve essas funções então eu trabalho só assim Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 20, 2017 Share Posted November 20, 2017 sobre colori aconselho a usar formatação condicional , pq já que as dezenas estão na outra tabela é só colori as iguais Quote Link to comment Share on other sites More sharing options...
Fernandes20 Posted November 20, 2017 Author Share Posted November 20, 2017 12 horas atrás, edcronos2 disse: é só vc esquecer as funções basicas do excel e pensa na planilha como um array bidimencional então vc passa da planilha para um array , trabalha o array e passa de volta para a planilha formate sua planilha previamente e cole apenas valores array1=range(range que quer pegar).value2 for array2(L2,C2)=array1(L1,C1) next range(range que quer colar).value2=array2 cara eu nunca lembro como escreve essas funções então eu trabalho só assim Não entendi com fazer isso... Fiz de outro modo o algoritmo, porém ele só precisa ser incrementado a cada clique sobre o botão colorir e copiar. Sub Macro2(x As Long, y As Long) ActiveCell.Select Selection.Copy Cells(x, y).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub Sub Macro1() Worksheets("Planilha1").Activate ActiveCell.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .PatternTintAndShade = 0 End With Call Macro2(7, 25) End Sub Tipo em Call Macro2(7, 25), a cada clique o sobre o botão, o valor 25 seria incrementado em uma unidade ( 25+1, 25+2 e etc ) colando estes valores na linha 7 e em colunas sequências. Como resolver isso? O laço de repetição é um pouco diferente do que estou acostumado, ele executa tudo de só vez sem a necessidade da interação do usuário. Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 20, 2017 Share Posted November 20, 2017 for next realmente, mas vc pode usar outro topo de loop , mas mesmo um for next aceita direcionamento interno com um if x=0 tehn msgbox "terminado" por exemplo bem, considere a planilha como interface, que tem seus objetos desculpa não dar muita atenção é que estou preparando o almoço e por causa do vicio estou aqui kkkk bem vc pode tentar participar de algum forum de planilhas, o pessoal ajuda bastante , esse tipo de intervenção não faz muito o meu estilo , não consigo nem olhar direito , e3ntendendo a logica depois posso tentar fazer uma rotina do meu jeito Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 20, 2017 Share Posted November 20, 2017 38 minutos atrás, Fernandes20 disse: porém ele só precisa ser incrementado a cada clique no caso não pode ficar incorporado no codigo, apenas como execução secundaria vc tem que incorporar a macro no botão , portanto a macro tem que acionar apenas aquilo que vc quer que faça a cada execução Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 20, 2017 Share Posted November 20, 2017 a macro chamada é como um Main o botão é como se fosse a chamada no caso como o exe desse programa , vc clica ele executa Quote Link to comment Share on other sites More sharing options...
Fernandes20 Posted November 22, 2017 Author Share Posted November 22, 2017 Consegui resolver, deu um pouco de trampo mais saiu, não é melhor solução mas funciona Sub Macro2(x As Long, y As Long) ActiveCell.Select Selection.Copy Cells(x, y).Select Do If ActiveCell <> "" Then ActiveCell.Offset(0, 1).Select End If Loop Until ActiveCell = "" ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False End Sub Sub Macro1() ActiveCell.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 10027008 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With Selection.Font.Bold = True MsgBox "Dezena Selecionada: " & ActiveCell.Value Call Macro2(7, 25) End Sub Sub Worksheet_Calculate() Application.EnableEvents = False If Range("AI7") < Range("N7") Then Call Macro1 End If End Sub Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.