Notifications
Clear all

Copiar planilha via VBA

12 Posts
2 Usuários
0 Reactions
3,123 Visualizações
(@julios)
Posts: 15
Eminent Member
Topic starter
 

Boa tarde, camaradas!
Queria uma ajudinha de vocês com o comando "ActiveWorkbook.SaveAs"... Não estou entendendo muito bem como ele funciona. Como faço para salvar a workbook com o nome "Nome da Workbook_(Combobox value)-(Txtbox Text)", em um diretório definido pelo programa, em modo somente leitura, formato ".xls".
E aproveitando que estou aqui, queria saber se tem como selecionar todas as sheets (estou trabalhando com 27 sheets iguais com dados diferentes) e apagar todos os dados inseridos no mesmo range (A3:H300). É que estou tentando criar um botão para "gerar arquivo" e ele deve copiar a planilha para uma pasta chamada "arquivos" e depois apagar os dados que foram digitados durante o mês na planilha original... Agradeço a compreensão de vocês com os novatos. Abraços!

 
Postado : 08/03/2013 9:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

poste a plan que é bem mais produtivo.

Abs,

 
Postado : 08/03/2013 9:20 am
(@julios)
Posts: 15
Eminent Member
Topic starter
 

Mandrix, aqui está a plan. Quando você abrir pedirá uns dados. Login=Flavia;Senha=neironilson. No menu desenvolvedor a senha é 1234567890123456

Edit: minha duvida esta explicada no código da form "frmArquivo"

 
Postado : 08/03/2013 9:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Uma pergunta: Deseja salvar todo o arquivo com outro nome ou uma copia do arquivo com outro nome ou somente alguma(s) planilha(s) do arquivo
Motivo da pergunta: Ao salvar o arquivo com o SaveAs, o arquivo (chamemos assim) anterior (o originalmente aberto) e "fechado" e modificações efetuadas somente estão disponiveis no novo arquivo.

 
Postado : 08/03/2013 10:03 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se for salvar o arquivo corrente com outro nome pode utilizar:

Private Sub CommandButton1_Click()
'Salvar como "Gestão de Profissionais_(cboMes.Value)-(txtAno.Value)"
'em "Z:Gestão OperacionalGestão de ProfissionaisArquivos"
'no formato ".xls"
'<><><><><><><><><><>
Dim Pasta As String, Nom As String  
Pasta = "Z:Gestão OperacionalGestão de ProfissionaisArquivos"
Nom = "Gestão de Profissionais_(" & cboMes.Value & ")-(" & txtAno.Text & ").xls"
' Salvar em xlsm
'    ActiveWorkbook.SaveAs Filename:=Pasta & "" & Nom, _
'        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'Salvar em xls
    ActiveWorkbook.SaveAs Filename:=Pasta & "" & Nom, _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
 
Postado : 08/03/2013 10:12 am
(@julios)
Posts: 15
Eminent Member
Topic starter
 

Primeiramente, muito obrigado, Reinaldo! Respondendo a sua pergunta, o que eu quero é o seguinte:
Criar uma cópia do arquivo em .xls e depois limpar todos os dados inseridos no arquivo originalmente aberto. Isso porque é um controle de serviço mensal, então funcionaria da seguinte forma: Você digita os serviços durante o mês e no final, clica no botão para gerar arquivo e o aplicativo gera a cópia e limpa a planilha para que você possa digitar os serviços do mês, gerar outro arquivo no final e assim sucessivamente.

 
Postado : 08/03/2013 11:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Copie os codigos abaixo para sua planilha (formArquivo) substituindo o(s) existente(s).
Veja se lhe atende:

Private Sub CommandButton1_Click()
    'Salvar como "Gestão de Profissionais_(cboMes.Value)-(txtAno.Value)"
    'em "Z:Gestão OperacionalGestão de ProfissionaisArquivos"
    'no formato ".xls"
 
    SalvarComo
    Limpeza
MsgBox "Dados limpos"
Unload Me
End Sub
Private Sub SalvarComo()
'Salva copia do arquivo
Dim nPlan As String, Caminho As String, Arquivo As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
nPlan = "Gestão de Profissionais_(" & frmArquivo.cboMes.Value & ")-(" & frmArquivo.txtAno.Text & ").xls"
Caminho = "D:Any Video Converter"
'Caminho = "Z:Gestão OperacionalGestão de ProfissionaisArquivos"
Arquivo = Caminho & nPlan

    On Error GoTo erro
       
'Verifica se o diretorio existe, se não existir, sai da rotina
If (Dir(Caminho, vbDirectory) = "") Then
    MsgBox "Diretório Não Encontrado"
    Exit Sub
End If
'Verifica se o arquivo já existe, se existir sai da rotina
    If (Dir(Arquivo) <> "") Then
        MsgBox "Arquivo já existente"
        'Kill Arquivo
        Exit Sub
    End If
'Salva copia do arquivo no caminho especificado
'Cria um novo arquivo sem as macros
    ActiveWorkbook.Sheets.Copy
'O arquivo recem criado fica como o arquivo ativo
' salvando em xls e não receber a mensagem sobre a compatibilidade
    ActiveWorkbook.CheckCompatibility = False
    ActiveWorkbook.SaveAs Filename:=Arquivo, FileFormat:=xlExcel8
    ActiveWorkbook.Close
fim:
Application.ScreenUpdating = True
        MsgBox " Arquivo " & Arquivo & " criado e salvo com sucesso"
    Exit Sub
erro:
Application.ScreenUpdating = True
        MsgBox "Erro ao criar backup:" & vbCrLf & Err.Description, vbOKOnly + vbCritical, "Atenção"
        Err.Clear
    Resume fim
End Sub

Private Sub Limpeza()

For Each ws In ActiveWorkbook.Sheets
    If ws.Visible = True Then
        ws.Activate
        Range("A3:H300").ClearContents
    End If
Next
End Sub

 
Postado : 08/03/2013 12:56 pm
(@julios)
Posts: 15
Eminent Member
Topic starter
 

Muito obrigado, Reinaldo! A parte de gerar o arquivo funcionou, mas encontrei um problema na parte de limpar os dados... Veja bem: Primeiramente, eu havia me esquecido que duas sheets ocultas "Operadora" e "Profissionais" são sources para combobox do formulário de registro. Mas o problema nem foi esse, não consegui limpar os dados, deu o seguinte erro:

Erro de Compilação: É impossível localizar o projeto ou a biblioteca
*e o erro selecionou uma parte (entre asteriscos para indicar) do código para indicar

Private Sub Limpeza()

For Each *ws* In ActiveWorkbook.Sheets
    If ws.Visible = True Then
        ws.Activate
        Range("A3:H300").ClearContents
    End If
Next
End Sub
 
Postado : 08/03/2013 1:49 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No editor do VBA vá em Ferramentas -->referencias e verifique se exite alguma referencia com (Ausente)conforme a imagem anexa

 
Postado : 08/03/2013 5:34 pm
(@julios)
Posts: 15
Eminent Member
Topic starter
 

Aqui está bem assim, Reinaldo

 
Postado : 09/03/2013 6:35 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Desmarque onde está escrito AUSENTE!

Att

 
Postado : 09/03/2013 6:46 am
(@julios)
Posts: 15
Eminent Member
Topic starter
 

Muito obrigado, camaradas!!! Graças a vocês terminei o meu projeto!!!

 
Postado : 09/03/2013 7:24 am