Adaptei em meu projeto conforme orientado:
Fiz a chamada em um botão: call ZipaBanco
Na unidade C:/ criei uma pasta "teste" editando na função;
Na função BackEndAtual aloquei uma tabela do meu backend.
Mas está dando erro "variável não definida" na linha em destaque azul (mPasta)
o que está errado? minha versão do access é 2010
Obs:Já fiz teste na pasta Raiz - c:/ dá mesmo erro....
O código abaixo está em um módulo blobal....
Option Compare Database
Option Explicit
Public Sub ZipaBanco()
Dim strDate As String, DefPath As String
Dim oApp As Object
Dim fname, FileNameZip
'Dim strPrefix As String
On Error Resume Next
Observe que aqui vc define o destino, usando a função fncOrigem.
Está definido como System, ou seja, a partir da pasta-raiz da aplicação (não do hd).
Esta pasta deve existir, ou, no argumento da função, vc deve definir o nome de uma que exista.
DefPath = fncOrigem(mSystem) 'Local e pasta onde está o banco de backup
'As opções de pasta são definidas na função do Avelino
If right(DefPath, 1) <> "\" Then
DefPath = DefPath & "\"
End If
strDate = Format(Now, "dd-mmm-yy_h-mm-ss")
FileNameZip = DefPath & Empresa & " Backup " & Format(Date, "Long Date") & " .zip"
fname = BackEndAtual
On Error Resume Next
CriaNovoZip (FileNameZip)
Set oApp = CreateObject("Shell.Application")
oApp.NameSpace(FileNameZip).CopyHere fname
Info "Criado com sucesso em: " & FileNameZip
Set oApp = Nothing
Exit Sub
End Sub
Public Sub CriaNovoZip(sPath)
Dim ofso, arrHex, sBin, i, Zip
On Error Resume Next
Set ofso = CreateObject("Scripting.FileSystemObject")
arrHex = Array(80, 75, 5, 6, 0, 0, 0, _
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
For i = 0 To UBound(arrHex)
sBin = sBin & Chr(arrHex(i))
Next
On Error Resume Next
With ofso.CreateTextFile(sPath, True)
.Write sBin
.Close
End With
Exit Sub
End Sub
'Código de Avelino Sampaio
'Cria uma lista para usar com o argumento pasta
'Cada item corresponde a número começando do zero
'
Public Enum mPasta
mRaiz
mTeste
mImagens
End Enum
Public Function Empresa() As String
Empresa = "Nome da Empresa"
End Function
Public Function fncOrigem(Optional pasta As mPasta = mRaiz)
On Error Resume Next
Dim strLocal As String
Select Case pasta
Case 0: strLocal = "\"
Case 1: strLocal = "\Teste\"
Case 2: strLocal = "\Imagens\"
Case Else: MsgBox "Pasta informada fora da lista...", vbInformation, "Aviso"
End Select
fncOrigem = Application.CurrentProject.Path & strLocal
End Function
'Função que Retorna o arquivo backend:
Public Function BackEndAtual() As String
Dim strCon As String
' tab_Clientes é um exemplo. Substitua pelo nome de uma tabela qualquer do backend
strCon = CurrentDb.TableDefs("tbl_Colaborador").Connect
BackEndAtual = right$(strCon, Len(strCon) - InStr(1, strCon, "=", 2))
End Function