none
VBA WORD APAGAR LINHAS RRS feed

  • Pergunta

  • Olá galera,

    Estou precisando de uma ajuda com VBA para o Word.

    Preciso de uma VBA que exclua linhas que contenham células em branco, exemplo:

    123 | 123

    456 |       < Preciso que esta linha seja excluída.

    Encontrei um VBA pela internet que exclui linhas em branco, porém ele só exclui a linha caso ela seja toda em branco e não apenas a célula, tentei adaptar para o que preciso mas não consegui, o código que tenho segue abaixo:

    Public Sub Document_open()

    Dim sTab As Table
    Dim sLin As Range
    Dim sCel As Cell
    Dim sContador As Long
    Dim sNumLinhas As Long
    Dim sTextLin As Boolean

    ' Seleciona a tabela
    Set sTab = Application.Selection.Tables(1)

    ' Define uma variável para o primeiro intervalo de linha
    Set sLin = sTab.Rows(1).Range
    sNumLinhas = sTab.Rows.Count
    Application.ScreenUpdating = False
    For sContador = 1 To sNumLinhas
    StatusBar = "Row " & sContador
    sTextLin = False
    For Each sCel In sLin.Rows(1).Cells
    If Len(sCel.Range.Text) > 2 Then
    sTextLin = True
    Exit For
    End If
    Next sCel
    If sTextLin Then
    Set sCel = sCel.Next(wdRow)
    Else
    sLin.Rows(1).Delete
    End If
    Next sContador
    Application.ScreenUpdating = True
    End Sub

    sexta-feira, 26 de agosto de 2016 12:14

Respostas

  • Public Sub Document_open()
        Dim sTab As Table
        Dim sCel As Cell
        Dim sContador As Long
        Dim sNumLinhas As Long
        Dim iRow As Long
        
        ' Seleciona a tabela
        Set sTab = Application.Selection.Tables(1)
        
        ' Define uma variável para o primeiro intervalo de linha
        sNumLinhas = sTab.Rows.Count
        'Application.ScreenUpdating = False
        
        For sContador = 1 To sNumLinhas
            StatusBar = "Row " & sContador
            For iRow = sTab.Rows.Count To 1 Step -1
                For Each sCel In sTab.Rows(iRow).Cells
                    If Len(sCel.Range.Text) <= 2 Then
                        sTab.Rows(iRow).Delete
                        Exit For
                    End If
                Next sCel
            Next iRow
        Next sContador
    
        Application.ScreenUpdating = True
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    • Marcado como Resposta zfelipec segunda-feira, 29 de agosto de 2016 13:07
    • Não Marcado como Resposta zfelipec segunda-feira, 29 de agosto de 2016 13:08
    • Sugerido como Resposta André Santo segunda-feira, 29 de agosto de 2016 13:12
    • Marcado como Resposta zfelipec quarta-feira, 31 de agosto de 2016 13:12
    segunda-feira, 29 de agosto de 2016 09:56
    Moderador

Todas as Respostas

  • Ao inserir um código no fórum, utilize blocos de código. Para utilizar essa ferramenta, clique no botão cuja legenda é “Inserir bloco de código” na barra do editor de mensagens do fórum. Uma janela aparecerá onde você deverá colar seu código cru na caixa de texto à esquerda. Então, selecione a opção Vb.Net na caixa de combinação que você verá em cima à esquerda e depois clique no botão Inserir.

    ---

    Tente assim:

    Public Sub Document_open()
        Dim sTab As Table
        Dim sLin As Range
        Dim sCel As Cell
        Dim sContador As Long
        Dim sNumLinhas As Long
        Dim sTextLin As Boolean
        
        ' Seleciona a tabela
        Set sTab = Application.Selection.Tables(1)
        
        ' Define uma variável para o primeiro intervalo de linha
        Set sLin = sTab.Rows(1).Range
        sNumLinhas = sTab.Rows.Count
        Application.ScreenUpdating = False
        
        For sContador = 1 To sNumLinhas
            StatusBar = "Row " & sContador
            sTextLin = False
            For Each sCel In sLin.Rows(1).Cells
                If Len(sCel.Range.Text) > 0 Then
                    sLin.Rows(1).Delete
                    Exit For
                End If
            Next sCel
        Next sContador
    
        Application.ScreenUpdating = True
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    domingo, 28 de agosto de 2016 23:13
    Moderador
  • Pode deixar, seguirei o procedimento, obrigado.

    Tentei usar o código, porém ele está excluindo a tabela toda, sem respeitar o critério... 

    segunda-feira, 29 de agosto de 2016 03:54
  • Public Sub Document_open()
        Dim sTab As Table
        Dim sCel As Cell
        Dim sContador As Long
        Dim sNumLinhas As Long
        Dim iRow As Long
        
        ' Seleciona a tabela
        Set sTab = Application.Selection.Tables(1)
        
        ' Define uma variável para o primeiro intervalo de linha
        sNumLinhas = sTab.Rows.Count
        'Application.ScreenUpdating = False
        
        For sContador = 1 To sNumLinhas
            StatusBar = "Row " & sContador
            For iRow = sTab.Rows.Count To 1 Step -1
                For Each sCel In sTab.Rows(iRow).Cells
                    If Len(sCel.Range.Text) <= 2 Then
                        sTab.Rows(iRow).Delete
                        Exit For
                    End If
                Next sCel
            Next iRow
        Next sContador
    
        Application.ScreenUpdating = True
    End Sub
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    • Marcado como Resposta zfelipec segunda-feira, 29 de agosto de 2016 13:07
    • Não Marcado como Resposta zfelipec segunda-feira, 29 de agosto de 2016 13:08
    • Sugerido como Resposta André Santo segunda-feira, 29 de agosto de 2016 13:12
    • Marcado como Resposta zfelipec quarta-feira, 31 de agosto de 2016 13:12
    segunda-feira, 29 de agosto de 2016 09:56
    Moderador
  • Fucionou perfeitamente mestre, porém, ele só funciona para primeira tabela do documento e o documento tem mais que uma tabela para a mesma ação seja tomada...
    • Editado zfelipec segunda-feira, 29 de agosto de 2016 13:09 Erro
    segunda-feira, 29 de agosto de 2016 13:07
  • No Trecho de código abaixo ele está selecionando somente uma tabela, a 01.

        ' Seleciona a tabela
        Set sTab = Application.Selection.Tables(1)

    Você pode editar esta linha para pegar a tabela que quer ou fazer um laço para varrer todas as tabelas.


    André Santo | basevba.wordpress.com

    segunda-feira, 29 de agosto de 2016 13:13
  • André,

    Como seria esse laço?

    segunda-feira, 29 de agosto de 2016 16:29