Notifications
Clear all

Salvar Como Pasta de Trabalho Habilitada para Macro do Excel

9 Posts
4 Usuários
0 Reactions
2,776 Visualizações
(@ckymiller)
Posts: 39
Trusted Member
Topic starter
 

Senhores, bom dia.

Estou com o seguinte comando aqui:

    Sub Botão3_Clique()
    'Display the Save As dialog box

    Dim dlgSaveAs As FileDialog
    'Set the dialog type
    Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs)
    'Display the dialog
    dlgSaveAs.Show
End Sub

Gostaria de saber como faço pra que na hora de salvar o arquivo ( Quando a função FileDialog é aberta), ele automaticamente seleciona a opção: '' Pasta de Trabalho Habilitada para Macro do Excel''.

Grato,

Miller.

 
Postado : 19/06/2013 6:43 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

ckymiller,

Bom Dia!

Faça assim:

        Sub Botão3_Clique()
        'Display the Save As dialog box

        Dim dlgSaveAs As FileDialog
        'Set the dialog type
        'Isso mostrará todos os arquivos da pasta. Se quiser mostrar só o caminho, retire o *.* do final.
        Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "Pasta de Trabalho Habilitada para Macro do Excel*.*"
        'Display the dialog
        dlgSaveAs.Show
    End Sub
 
Postado : 19/06/2013 8:13 am
(@ckymiller)
Posts: 39
Trusted Member
Topic starter
 

Wagner Morel

Muito obrigado pela resposta.

Na hora de rodar a macro, ele da erro de compilação em (Destaque em vermelho):
Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "Pasta de Trabalho Habilitada para Macro do Excel*.*"

Porque?

No momento estou usando a seguinte macro:

Sub Copy_ActiveSheet_New_Workbook()
'Working in Excel 97-2007
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Set Sourcewb = ActiveWorkbook

    'Copy the sheet to a new workbook
    ActiveSheet.Copy
    Set Destwb = ActiveWorkbook

    'Determine the Excel version and file extension/format
    With Destwb
        If Val(Application.Version) < 12 Then
            'You use Excel 97-2003
            FileExtStr = ".xls": FileFormatNum = -4143
        Else
            'You use Excel 2007
            'We exit the sub when your answer is NO in the security dialog that you
            'only see when you copy a sheet from a xlsm file with macro's disabled.
            If Sourcewb.Name = .Name Then
                With Application
                    .ScreenUpdating = True
                    .EnableEvents = True
                End With
                MsgBox "Your answer is NO in the security dialog"
                Exit Sub
            Else
                Select Case Sourcewb.FileFormat
                Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If .HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56: FileExtStr = ".xls": FileFormatNum = 56
                Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                End Select
            End If
        End If
    End With

    '    'If you want to change all cells in the worksheet to values, uncomment these lines.
    '    With Destwb.Sheets(1).UsedRange
    '        .Cells.Copy
    '        .Cells.PasteSpecial xlPasteValues
    '        .Cells(1).Select
    '    End With
    '    Application.CutCopyMode = False

    'Save the new workbook and close it
    TempFilePath = Application.DefaultFilePath & ""
    TempFileName = Sourcewb.Name

    With Destwb
        .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
        .Close SaveChanges:=False
    End With

    MsgBox "Seu arquivo foi salvo em " & TempFilePath

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

Porém, eu estou usando VBA para enviar o Arquivo via Outlook para 5 pessoas na empresa, e eu acho mais interessante a macro que você está me ajudando, pois, ela permite o usuário salvar aonde ele quer, e a de cima tem um local predefinido.

PS:Vou anexar meu arquivo, talvez futuramente ajude alguém, com a macro acima e/ou a de enviar e-mails com arquivos em anexo pelo Outlook.

 
Postado : 19/06/2013 8:40 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Falha minha.

Desculpe.

Faltou o drive, claro. O Comando é (lembrando, obviamente, que esta Pasta com esse nome deve existir no micro da pessoa que vai salvar o arquivo):

Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "C:Pasta de Trabalho Habilitada para Macro do Excel*.*"
 
Postado : 19/06/2013 9:04 am
(@ckymiller)
Posts: 39
Trusted Member
Topic starter
 

Falha minha.

Desculpe.

Faltou o drive, claro. O Comando é (lembrando, obviamente, que esta Pasta com esse nome deve existir no micro da pessoa que vai salvar o arquivo):

Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "C:Pasta de Trabalho Habilitada para Macro do Excel*.*"

Opa, deu certo!

Queria aproveitar e pedir uma ajuda.
Queria bloquear as celulas D4:D20, se o valor da celula E3 for "AÇÃO". Caso E3 for ''RNC'' continuar livre pra digitação.

Isso daria pra fazer com validação de dados ou com VBA?

 
Postado : 21/06/2013 8:13 am
(@ckymiller)
Posts: 39
Trusted Member
Topic starter
 

Consegui. Resolvido :D

=E(E3<>"AÇÃO")

Obrigado Wagner Morel

 
Postado : 21/06/2013 8:43 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Boa Tarde!

Para fazer o que você está pretendendo, a planilha deve ser protegida e desprotegida, via código, assim como a faixa de células que você quer que fiquem bloqueadas/desbloqueadas. O Código abaixo faz isso. Observe que protegi a planilha com a senha igual a 1.

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    ActiveSheet.Unprotect (1)
    If Target.AddressLocal(rowabsolute:=False, columnabsolute:=False) = "E3" And Target.Value = "AÇÃO" Then
        Range("D4:D20").Select
        Selection.Locked = True
        Selection.FormulaHidden = False
    ElseIf Target.AddressLocal(rowabsolute:=False, columnabsolute:=False) = "E3" And Target.Value = "RNC" Then
        Range("D4:D20").Select
        Selection.Locked = False
        Selection.FormulaHidden = False
        Range("E3").Select
    End If
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="1"
    Application.EnableEvents = True
End Sub
 
Postado : 21/06/2013 9:17 am
(@w_silva)
Posts: 8
Active Member
 

E se eu quiser bloquear somente da célula F3:F101 impendido do usuário fazer qualquer tipo de modificação.
Quando o mesmo clicar para editar essa célula deve aparecer uma tela pedindo senha sendo essa senha " fechamento1 "
Fico grato

 
Postado : 28/03/2014 10:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

W_Silva, da proxima vez abra um tópico especifico a sua duvida, apesar deste lhe servir, para mantermos a ordem no forum o ideal é ter o seu.

Mas, aproveitando, para alterar o Range você tem de alterar na seguinte linha:
Range("D4:D20") este são os Ranges definidos.

Quanto a questão de pedir a senha, poderá estar uitizando um comando nativo do Excel pouco explorado, que seria o Recurso "Permitir que os usuarios editem intervalos" que se encontra no Menu Ferramentas/Proteger (pelo menos no excel 2003)
Agora associando este recurso a outras rotinas pois para que ele funcione corretamente a planilha tem de estar protegida, de uma olhada no link abaixo onde tem um modelo.
VBA Excel pedir autorização para alterar dados de uma célula
http://www.tomasvasquez.com.br/forum/vi ... lula#p5710

OBS: Vou Trancar este Tópico e se resolver continuar o assunto, abra um novo que transfiro estas mensagens par o tópico novo.

[]s

 
Postado : 28/03/2014 5:45 pm