Notifications
Clear all

Macro para Inserir/Remover última linha

10 Posts
3 Usuários
0 Reactions
2,843 Visualizações
 Rech
(@rech)
Posts: 58
Trusted Member
Topic starter
 

Pessoal, boa tarde!

Tenho uma planilha com formulário (userform) que, ao clicar OK, insere as informações em uma tabela e inclui uma nova linha, seguindo a formatação da última.
Porém, para que esta nova linha seja inserida, é preciso que a última linha da tabela esteja em branco, ou seja, ela "copia" a última linha e adiciona uma nova.

Gostaria de ao clicar OK, fosse inserida uma linha, mas sem necessidade de que esta linha em branco permanecesse, ou seja, clicar OK e o formulário inserir dentro de uma nova linha, seguindo a formatação da anterior. O código que estou usando é o seguinte:

Dim linha As Long

linha = Range("B" & Rows.Count).End(xlUp).Row
linha = linha + 1
Range("B" & linha).Select

With Selection.EntireRow
.Offset(-1).Copy
.Insert
On Error Resume Next
.Offset(-1).SpecialCells(xlCellTypeConstants, 23).ClearContents
On Error GoTo 0
End With

Também gostaria de um código para remover a última linha preenchida. As vezes insiro a informação através do formulário, porém se algo tiver errado, como o VBA não permite desfazer a ação, gostaria de uma macro para excluir a última linha preenchida.

Obrigado!!

 
Postado : 07/11/2014 1:52 pm
 Rech
(@rech)
Posts: 58
Trusted Member
Topic starter
 

Bom dia, pessoal!
Ninguém sabe como me ajudar?

Abraços,
Thiago.

 
Postado : 12/11/2014 6:27 am
(@edcronos)
Posts: 1006
Noble Member
 

para ter uma melhor ajuda o ideal seria um exemplo de planilha com dados e posições exatas da planilha original
e um exemplo de como vc quer
eu tentei entender mas alguns pontos ficaram confusos
pelo que entendi a coluna de referencia para linha em branco é a coluna "B"

copiar ultima linha e adicionar uma nova??
e oq fazer com a linha copiada?
adicionar uma nova? com oq?

fosse inserida uma linha, mas sem necessidade de que esta linha em branco permanecesse, ???
nessa parte fiquei totalmente confuso

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 12/11/2014 7:09 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia, pessoal!
Ninguém sabe como me ajudar?

Abraços,
Thiago.

Bom dia Thiago

Leia:

viewtopic.php?f=7&t=12600

[]s

Patropi - Moderador

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/11/2014 7:19 am
 Rech
(@rech)
Posts: 58
Trusted Member
Topic starter
 

Bom dia Thiago

Leia:

viewtopic.php?f=7&t=12600

[]s

Patropi - Moderador

Patropi,
Irei considerar estas recomendações para o próximo post. Obrigado!

para ter uma melhor ajuda o ideal seria um exemplo de planilha com dados e posições exatas da planilha original
e um exemplo de como vc quer
eu tentei entender mas alguns pontos ficaram confusos
pelo que entendi a coluna de referencia para linha em branco é a coluna "B"

copiar ultima linha e adicionar uma nova??
e oq fazer com a linha copiada?
adicionar uma nova? com oq?

fosse inserida uma linha, mas sem necessidade de que esta linha em branco permanecesse, ???
nessa parte fiquei totalmente confuso

Edcronos,
Estou enviando um modelo da planilha. Ao clicar no botão "Inserir Chamado", deve ser inserida uma nova linha com as informações preenchidas no formulário. Da forma atual, além de inserir esta linha, é adicionada também uma segunda linha em branco.
Gostaria que esta linha em branco não fosse adicionada, somente a linha preenchida com os dados do formulário.

E o botão com a seta, seria utilizado para desfazer o último lançamento (no caso, a última linha), já que o VBA inutiliza o botão desfazer do Excel.
Ah, a macro está habilitada para bloquear a planilha ao clicar no botão, caso precise desbloquear o código é "Lecom".

Abraços!

 
Postado : 12/11/2014 9:34 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é isso:
Private Sub OK_Click()
Dim linha As Long

If formEntrada.Solicitado.Text = "" Then
MsgBox "Preencha o campo 'Solicitado'."
Exit Sub
End If

ActiveWorkbook.Sheets("Chamados").Activate
linha = Range("B" & Rows.Count).End(xlUp).Row

Cells(linha, 2) = Chamado.Value
Cells(linha, 3) = CDate(Dataabre.Value)
Cells(linha, 4) = Texto.Value
Cells(linha, 5) = User.Value
Cells(linha, 6) = CDate(Datafecha.Value)
Cells(linha, 7) = Solicitado.Value
Cells(7, 1).EntireRow.Copy
Cells(linha, 1).PasteSpecial xlPasteFormats

If formEntrada.txtAddress.Value <> "" Then

'Criando hiperlink do arquivo selecionado
ActiveCell.Offset(0, 5).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
formEntrada.txtAddress.Text, TextToDisplay:= _
Solicitado.Value
End If

Unload Me

End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/11/2014 12:43 pm
(@edcronos)
Posts: 1006
Noble Member
 

ao que parece alguem já respondeu,

não sei bem se é oq vc quer, mas modifiquei a macro para ficar de maneira que entendi que vc queria e que eu conseguisse fazer

Sub inicializar()'desprotege a planilha, pode ser usado para todas as outras macros que precise fazer alteração 
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
ActiveSheet.Unprotect
End Sub

Sub finalizar()' protege a planilha
ActiveSheet.Protect
   Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

Private Sub OK_Click()
Dim linha  As Long
If formEntrada.Solicitado.Text = "" Then
MsgBox "Preencha o campo 'Solicitado'."
Exit Sub
End If
On erro GoTo Final

ActiveWorkbook.Sheets("Chamados").Activate

inicializar '-----macro que desprotege

    linha = Range("B" & Rows.Count).End(xlUp).Row + 1
    
    Range("B" & linha - 1, "G" & linha - 1).Copy
   Cells(linha, 2).PasteSpecial xlPasteFormats
   
    Cells(linha, 2).Value = Chamado.Value
   Cells(linha, 3).Value = Dataabre.Value
    Cells(linha, 4).Value = Texto.Value
    Cells(linha, 5).Value = User.Value
    Cells(linha, 6).Value = Datafecha.Value
   Cells(linha, 7).Value = Solicitado.Value

  Final:
     finalizar
    Unload Me

End Sub

a parte que desfaz
no caso é para excluir a ultima linha certo?
mas tem que se saber se é apenas a linha recentemente adicionada, pq aí é mais dificil, pq vai ter que criar uma maneira de identificar essa linha, seria mais pratico adicionar uma macro de edição onde se pudesse apagar o registro errado.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 12/11/2014 2:30 pm
 Rech
(@rech)
Posts: 58
Trusted Member
Topic starter
 

Veja se é isso:
Private Sub OK_Click()
Dim linha As Long

If formEntrada.Solicitado.Text = "" Then
MsgBox "Preencha o campo 'Solicitado'."
Exit Sub
End If

ActiveWorkbook.Sheets("Chamados").Activate
linha = Range("B" & Rows.Count).End(xlUp).Row

Cells(linha, 2) = Chamado.Value
Cells(linha, 3) = CDate(Dataabre.Value)
Cells(linha, 4) = Texto.Value
Cells(linha, 5) = User.Value
Cells(linha, 6) = CDate(Datafecha.Value)
Cells(linha, 7) = Solicitado.Value
Cells(7, 1).EntireRow.Copy
Cells(linha, 1).PasteSpecial xlPasteFormats

If formEntrada.txtAddress.Value <> "" Then

'Criando hiperlink do arquivo selecionado
ActiveCell.Offset(0, 5).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
formEntrada.txtAddress.Text, TextToDisplay:= _
Solicitado.Value
End If

Unload Me

End Sub

JEduardo,
Obrigado pela ajuda. Porém este código, está lançando as informações em cima da última linha e não em uma nova linha como eu gostaria. Está apagando as informações que estavam escritas e entrando com as novas infos do formulário por cima.

ao que parece alguem já respondeu,

não sei bem se é oq vc quer, mas modifiquei a macro para ficar de maneira que entendi que vc queria e que eu conseguisse fazer

Sub inicializar()'desprotege a planilha, pode ser usado para todas as outras macros que precise fazer alteração 
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
ActiveSheet.Unprotect
End Sub

Sub finalizar()' protege a planilha
ActiveSheet.Protect
   Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

Private Sub OK_Click()
Dim linha  As Long
If formEntrada.Solicitado.Text = "" Then
MsgBox "Preencha o campo 'Solicitado'."
Exit Sub
End If
On erro GoTo Final

ActiveWorkbook.Sheets("Chamados").Activate

inicializar '-----macro que desprotege

    linha = Range("B" & Rows.Count).End(xlUp).Row + 1
    
    Range("B" & linha - 1, "G" & linha - 1).Copy
   Cells(linha, 2).PasteSpecial xlPasteFormats
   
    Cells(linha, 2).Value = Chamado.Value
   Cells(linha, 3).Value = Dataabre.Value
    Cells(linha, 4).Value = Texto.Value
    Cells(linha, 5).Value = User.Value
    Cells(linha, 6).Value = Datafecha.Value
   Cells(linha, 7).Value = Solicitado.Value

  Final:
     finalizar
    Unload Me

End Sub

a parte que desfaz
no caso é para excluir a ultima linha certo?
mas tem que se saber se é apenas a linha recentemente adicionada, pq aí é mais dificil, pq vai ter que criar uma maneira de identificar essa linha, seria mais pratico adicionar uma macro de edição onde se pudesse apagar o registro errado.

Edcronos,
Não consegui habilitar este código. Ao tentar executar está dando erro... Você poderia habilitar na planilha modelo e enviá-la, por favor?
E quanto a ação de desfazer, é exatamente isso, apagar a linha recém adicionada. Mas a macro de edição talvez sirva como alternativa. Sou meio leigo em macros e VBAs, poderia me dar essa ajuda?

Abraços.

 
Postado : 14/11/2014 12:28 pm
(@edcronos)
Posts: 1006
Noble Member
 

ver se isso te atende

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 14/11/2014 3:49 pm
 Rech
(@rech)
Posts: 58
Trusted Member
Topic starter
 

Excelente, Edcronos!

Era exatamente o que eu precisava!
Muito obrigado! :D

 
Postado : 17/11/2014 8:12 am