Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro ao tentar copiar um range

Boa tarde a todos(as), Tenho uma tabela que e gerada a partir de uma outra, por isso o numero de linha varia. Criei o seguinte código para copiar essa planilha e aplicar ela em um documento word:

Private Sub CommandButton1_Click()
If Me.TextBox1.Value = "" Or Me.TextBox2.Value = "" Or Me.TextBox3.Value = "" Or Me.TextBox4.Value = "" Then

MsgBox "É necessario preencher os campos...", vbInformation, "Informação"

TextBox1.SetFocus

Exit Sub
End If

Dim Planilha As Range
Dim Celula As Range


Sheets("Planilha cliente").Activate
Range("J1048576").Select
ActiveCell.End(xlUp).Select
ActiveCell.Offset(0, 2).Select
Set Celula = ActiveCell

Planilha = Range("b3", "Celula").Copy


Dim Word As Word.Application
Dim DOC As Word.Document

Set Word = CreateObject("Word.Application")
Word.Visible = True

Set DOC = Word.Documents.Open("C:\contrato\contrato_modelo.docx")

    With DOC

        .Application.Selection.Find.Text = "#NOME"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox1)

        .Application.Selection.Find.Text = "#RG_CNPJ"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox2)

        .Application.Selection.Find.Text = "#Rua"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox3)

        .Application.Selection.Find.Text = "#Bairro"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox4)

        .Application.Selection.Find.Text = "#Cidade"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox5)

        .Application.Selection.Find.Text = "#Telefone"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox6)

        .Application.Selection.Find.Text = "#Planilha"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = Planilha

        .Application.Selection.Find.Text = "#DataProposta"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = Date

        .Application.Selection.Find.Text = "#DataEntrega"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = UCase(Me.TextBox7)
    If Dir("C:\contrato\Contrato1.docx") <> "" Then

        Kill "C:\contrato\Contrato1.docx"

        End If

        .SaveAs2 ("C:\contrato\Contrato1.docx")


    End With


    MsgBox "Procedimento não concluído! Verifique novamente...", vbCritical, "Error"

    Exit Sub



        Set DOC = Nothing
        Set Word = Nothing
         Workbooks.Open Filename:="C:\contrato\Contrato1.docx"
End Sub

Porem, ele da erro na hora de copiar o Range e atribuir a variável planilha. como posso fazer um range usando uma célula conhecida e uma célula selecionada?

6 respostas

Oi Kaique tudo bem?

Planilha = Range("b3", "Celula").Copy está errado pois você não pode chamar uma cópia e atribuir para uma variável e Celula tem que estar fora de aspas pois é um range do vba e não do excel como o b3.

O correto é Planilha = Range("b3", Celula)

E também só declara Dim Planilha , quando declarei no meu teste Dim Planilha as Range tomei erro não sei porque.

Então fica assim:

Dim Planilha
Dim Celula As Range


Sheets("Planilha cliente").Activate
Range("J1048576").Select
ActiveCell.End(xlUp).Select
ActiveCell.Offset(0, 2).Select
Set Celula = ActiveCell

Planilha = Range("b3", Celula)

Espero ter ajudado!!!

Realmente funcionou, mas agora deu erro na hora de substituir, fala que säo tipos imcompativeis. No documento contrato_modelo.docx eu tinha colocado "#planilha". Tem alguma dica de como posso fazer essa colagem?

solução!

Troca o Planilha = Range("b3", Celula) por

 Range("b3", Celula).Select
Selection.Copy

E lá embaixo troca

    .Application.Selection.Range = Planilha por
        .Application.Selection.Paste

E veja se funciona. Se não funcionar escreve aqui o erro que deu e em que linha deu o erro.

Ele aplicou a planilha e todos os campos, porem a planilha nao ficou centralizada na folha, Tem algum comando que eu posso dar pra fazer isso?

De cabeça eu não sei o comando. Quando não sei o comando (geralmente esses comandos de formatação). Eu gravo a macro e depois edito ela e copio o código e jogo dentro do meu código principal.

Tenta gravar a macro se não der certo disponibiliza a planilha e o documento word no dropbox e deixa o link aqui. Se tiver informações reais de clientes apaga eles antes de enviar os arquivos.

Não consegui automatizar o processo de formatação, mas consegui terminar as outras coisas. Muito obrigado.