Notifications
Clear all

Macro para gravar em célula indefinida

9 Posts
2 Usuários
0 Reactions
1,099 Visualizações
(@fleury)
Posts: 5
Active Member
Topic starter
 

Srs,

Estou fazendo uma Macro para salvar dados de uma planilha e estou encontrando dificuldades para informar a célula de destino.

Sub Alteração3()
'
' Alteração3 Macro
'

' Range("J78").Select
Selection.Copy
Sheets("Calc").Select
Range("Q7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Minha dificuldade esta na Range ("Q7"). Preciso que o "7" seja um valor informado numa célula.

Grosseiramente, ficaria assim Range ("Q(A1)", onde na célula A1 tenho o numero da linha de destino.

A necessidade prende-se ao fato de que a cada momento a linha de destino muda.

Serão várias cópias( cerca de 30 células) simultâneas para células da mesma linha onde as colunas são fixas, mas as linhas mudam a cada cópia.

Poderiam me dar algumas dicas?

Abraços

Flávio

 
Postado : 04/12/2014 2:39 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Isso:

Range("Q" & Range("A1").Value2).Select

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 04/12/2014 2:45 pm
(@fleury)
Posts: 5
Active Member
Topic starter
 

Gilmar,

Ficou assim:

Sub GravarAcertos()
'
' GravarAcertos Macro
'

Range("J14").Select
Selection.Copy
Sheets("Dados").Select
Range("K" & Range("X13").Value2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Infelizmente, não deu certo,
vai para o "depurador" na linha: Range("K" & Range("X13").Value2).Select
Uso o Excel 2010

O que fiz de errado?

Abraços

 
Postado : 04/12/2014 3:03 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Desculpe, eu me distraí (esqueci que vc tinha usado o gravador de macros).

Fiz um ajuste pra vc:

Sub GravarAcertos()
' GravarAcertos Macro

Dim linha As Long
linha = Range("X13").Value2

Range("J14").Copy
Sheets("Dados").Select
Range("K" & linha).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Não mexi muito, pra não te atrapalhar (embora desse pra simplificar mais. Mas, se quiser, pode ser assim:

Sub GravarAcertos()
' GravarAcertos Macro
Sheets("Dados").Range("K" & Range("X13").Value2).Value2 = Range("J14").Value2
End Sub

Abs

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 04/12/2014 3:41 pm
(@fleury)
Posts: 5
Active Member
Topic starter
 

Gilmar,

Parabéns, usei :

Sub GravarAcertos()
' GravarAcertos Macro
Sheets("Dados").Range("K" & Range("X13").Value2).Value2 = Range("J14").Value2
End Sub

funciona maravilhosamente.......

Gostaria de "aprimorar"um pouco mais minha macro, sou novo no fórum, devo abrir outro tópico ou posso continuar amolando todos por aqui?

1) Após a cópia, limpar J14 !

2) No inicio da macro, caso J14 esteja vazio, exibir um msgbox avisando desse fato e deixar continuar se o usuario desejar gravar "vazio".

3) Tenho mais idéias para essa macro, mas vou devagar, assim vou aprendendo com os mestres!

Por favor me avise se devo abrir outro tópico.

Já devo algumas "brejas".....

Grande abraço e parabéns por sua paciência.

Flávio

 
Postado : 04/12/2014 6:15 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Se as dúvidas forem como esta, com o mesmo assunto, pode continuar aqui mesmo.

Agora, se vc quiser fazer outra coisa na mesma planilha, dai pode ser o caso de abrir outro tópico.

Sub GravarAcertos()
' GravarAcertos Macro
Dim resposta    As Long
Dim origem      As Range
Dim destino     As Range

Set origem = Range("J4")
Set destino = Sheets("Dados").Range("K" & Range("X13").Value2)

If IsEmpty(origem) Then
    resposta = MsgBox("A célula J4 está vazia, deseja gravar vazio?", vbYesNo)
    If resposta = 6 Then '6 = sim
        destino.ClearContents
    Else
        Exit Sub
    End If
Else
    destino.Value2 = origem.Value2
    origem.ClearContents
End If
End Sub

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 04/12/2014 8:02 pm
(@fleury)
Posts: 5
Active Member
Topic starter
 

Gilmar,

Estamos com um "errinho" na linha:

Else
destino.Value2 = origem.Value2
origem.ClearContents ---------------------------> aqui estamos com o erro, vai para o "Depurador"
End If
End Sub

Grande abraço

Flávio

 
Postado : 08/12/2014 9:57 am
(@fleury)
Posts: 5
Active Member
Topic starter
 

Gilmar,

Após inúmeras tentativas, dei um "jeitinho", e, apesar de "estragar a beleza " do seu trabalho, deu certo!

Ficou assim:

Else
destino.Value2 = origem.Value2
' origem.ClearContents
End If
Sheets("Formulario").Select
Range("N75").Activate
Selection.ClearContents

End Sub.

Mais uma vez, obrigado!

Flávio

 
Postado : 08/12/2014 10:34 am
(@gtsalikis)
Posts: 2373
Noble Member
 

CAra, na verdade, ainda não consegui ver essa questão, mas só pelo que vc postou, tente manter o último código que te passei, apenas altere essa linha:

set origem = Range("J4")

Por essa:

Set origem = Sheets("Formulario").Range("J4")

Abs

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 08/12/2014 10:42 am