Notifications
Clear all

salvar XLTM

10 Posts
1 Usuários
0 Reactions
1,668 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mais uma duvida.
situação 1 - Um arquivo modelo (XLTM) , quando se dá um duplo clicque diretamente no arquivo para abrir , depois em salvar ; abre-se a caixa de salvamento. (para que o modelo permaneça "limpo", como modelo) ,

situação 2 - Porém se estiver com um arquivo qualquer de excel aberto , for em "ARQUIVO-ABRIR" selecionar um arquivo XLTM ; posso clicar em salvar que o mesmo aceita "sujar" o modelo (XLTM) , salvando o mesmo por cima (sem que a caixa de salvamento seja aberta).

Existe como contornar isso ? Seria algo do tipo desabilitar o botão salvar?

P.S - Dentro desse XLTM , tenho o seguinte código,que obriga o salvamento somente em xlsm (desabilita as outras extensões), porem se for aberto pela situação 2 o código não funciona ; uma vez que a caixa de salvamento não abre.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FileNameVal As String
    Dim strName As String
    If SaveAsUI Then        
        FileNameVal = Application.GetSaveAsFilename(strName, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
        Cancel = True       
        If FileNameVal = "Falso" Then 'User pressed cancel
            Exit Sub
        End If        
        Application.EnableEvents = False            
            If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
                ThisWorkbook.SaveAs filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled            
            Else
                ThisWorkbook.SaveAs filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            End If            
        Application.EnableEvents = True        
    End If
End Sub
 
Postado : 16/09/2014 8:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Tu quer salvar em um formato especifico?

Tente adaptar algo assim......

If SaveAsUI = True Then
            varWorkbookName = Application.GetSaveAsFilename( _
    fileFilter:="Excel Macro-Enabled Workbook (*.xltm")
            Cancel = True
 
        If varWorkbookName <> "False" Then
                Select Case LCase(Right(varWorkbookName, Len(varWorkbookName) - InStrRev(varWorkbookName, ".", , 1)))
             Case "xltm": FileFormatValue = 53
 
                End Select

Veja uma função tratando os formatos/versões

'Autor:Ken Puls
'Fonte:http://www.excelguru.ca/
Private Function GetFileSaveAsType(sExtension As String) As Long
    Select Case LCase(sExtension)
         '// Template Files
    Case Is = ".xlt"
         '17 Template
        GetFileSaveAsType = xlTemplate
    Case Is = "xlts"
         '54 Open XML Template
        GetFileSaveAsType = xlOpenXMLTemplate
    Case Is = "xltm"
         '53 Open XML Template Macro Enabled
        GetFileSaveAsType = xlOpenXMLTemplateMacroEnabled
         '// Workbooks
    Case Is = ".xls"
         '-4143 Workbook normal
        GetFileSaveAsType = xlWorkbookNormal
    Case Is = "xlsx"
         '51 Open XML Workbook
        GetFileSaveAsType = xlOpenXMLWorkbook
    Case Is = "xlsm"
         '52 Open XML Workbook Macro Enabled
        GetFileSaveAsType = xlOpenXMLWorkbookMacroEnabled
         '// Add-ins
    Case Is = ".xla"
         '18 Microsoft Excel 97-2003 Add-In
        GetFileSaveAsType = xlAddIn8
    Case Is = "xlam"
         '55 Open XML Add-In
        GetFileSaveAsType = xlOpenXMLAddIn
         '// If in doubt...
    Case Else
         '-4143 Workbook normal
        GetFileSaveAsType = xlWorkbookNormal
    End Select
End Function

Att

 
Postado : 16/09/2014 8:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Digamos assim, o formato deve ser xlsm ; isso já se faz com o código que postei.

porem na situação 2 ; salva-se tambem em xltm , é isso que não quero,

tentei usar o seu código porém deu 'GetSaveAsFilename" do objeto'_Application' falhou.
Mandei depurar , selecionou esta linha

varWorkbookName = Application.GetSaveAsFilename( _
fileFilter:="Excel Macro-Enabled Workbook (*.xltm")

 
Postado : 16/09/2014 8:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

então , fiz testes aqui e cheguei a conclusão que : basta um código que desabilite o disquete do salvar , caso a extensão do arquivo aberto seja diferente de XLSM (salvar como continua habilitado) , porem não sei como fazer

 
Postado : 16/09/2014 9:09 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

achei este código para desabilitar o salvar , mas não funciona , alguem sabe o motivo? meu excel é o 2010.

Sub Desabilitar_Salvar()
Dim cbControles As CommandBarControl
Sheets("Plan_Saber1").Cells(3, 2) = "Ítens Salvar e Salvar como Desabilitado"
With CommandBars("File")
     Set cbControles = .FindControl(ID:=3)
     cbControles.Enabled = False
     Set cbControles = .FindControl(ID:=748)
     cbControles.Enabled = False
End With
End Sub
 
Postado : 16/09/2014 9:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Este código é para excel 2003, no 2010 acredito ser igual ao 2007 RIBBONS, então tem de pesquisar sobre desabilitar RIBBONS.
Não tenho nenhuma destas versões aqui no serviço para testar, então aguardaremos alguem que tenha.
Por enquanto de uma olhada no link abaixo:
Using the Application.CommandBars("Ply") to enable disable the Delete button
http://social.msdn.microsoft.com/Forums ... m=exceldev

How to disable Right Click Delete Sheet Command in Excel 2010 using VBA
http://social.msdn.microsoft.com/Forums ... m=exceldev

[]s

 
Postado : 16/09/2014 10:34 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!

Se for para desabilitar Salvar como... use o código!!!

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then
Cancel = True
MsgBox "A opção Salvar como... encontra se desativada. Use a opção Salvar."
End If
End Sub

Att,

 
Postado : 16/09/2014 10:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

quase.
Preciso do SALVAR_COMO habilitado ; e o SALVAR desabilitado ; mas muito obrigado mesmo assim

 
Postado : 16/09/2014 10:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!

Tente isto:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Senha As String
Senha = "123"

If InputBox("Digite a senha para Salvar, ou em branco apenas fecha.", "Proteção") = Senha Then
Exit Sub
Else
If SaveAsUI = True Then
MsgBox "Não é permitido 'Salvar Como'"
Cancel = True
Exit Sub
End If

If SaveAsUI = False Then
MsgBox "Não é permitido 'Salvar'"
Cancel = True
Exit Sub
End If
End If
End Sub

Att,

 
Postado : 16/09/2014 11:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Favor darem uma olhada na msgbox ai do código , com minha duvida.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FileNameVal As String
    Dim strName As String
           If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
  If SAveUI = False Then ' desabilita somente o SALVAR , o SALVAR_COMO continua ativo
Cancel = True
'msgbox " botão desabilitado, utilize o SALVAR_COMO" se eu ativar esta msg ela aparece tanto quando se clica no salvar ,
' como no salvar como. Gostaria que aparecesse somente quando clicasse no salvar.
End If
'If SAveAsUI = False Then
'Cancel = True
'End If
End If
     If SaveAsUI Then
        FileNameVal = Application.GetSaveAsFilename(strName, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
        Cancel = True
        If FileNameVal = "Falso" Then 'User pressed cancel
            Exit Sub
        End If
        Application.EnableEvents = False
            If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            If SAveUI = True Then
            Cancel = False
            End If
                ThisWorkbook.SaveAs filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            Else
            ThisWorkbook.SaveAs filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            End If
        Application.EnableEvents = True
    End If
'
End Sub
 
Postado : 17/09/2014 8:53 am