ALTERANDO NOME IDENTICO NO SALVAMENTO
Olá pessoal
Tenho que um arquivo em excel com um botão que faz a exportação de uma planilha em PDF, onde o usuário informa o nome do arquivo e local onde o mesmo será salvo. Porém, se o usuário informar um nome de arquivo já existente, ele obviamente não é gerado.
Diante disso, preciso que este código quando identificasse que o nome do arquivo que o usuário informou, já existe no destinho que em ele escolheu, este mesmo nome seja alterado automaticamente.
Ex: O usuário salvou o primeiro arquivo com o nome TESTE. Ao salvar o segundo arquivo de mesmo nome no mesmo destino altera-se o nome para TESTE(1)...o terceiro TESTE(2)... etc.
Estou postando uma planilha modelo em anexo. Alguém pode me ajudar? Desde já agradeço.
Obrigado,
Pablo Moreira
Tenho que um arquivo em excel com um botão que faz a exportação de uma planilha em PDF, onde o usuário informa o nome do arquivo e local onde o mesmo será salvo. Porém, se o usuário informar um nome de arquivo já existente, ele obviamente não é gerado.
Diante disso, preciso que este código quando identificasse que o nome do arquivo que o usuário informou, já existe no destinho que em ele escolheu, este mesmo nome seja alterado automaticamente.
Ex: O usuário salvou o primeiro arquivo com o nome TESTE. Ao salvar o segundo arquivo de mesmo nome no mesmo destino altera-se o nome para TESTE(1)...o terceiro TESTE(2)... etc.
Estou postando uma planilha modelo em anexo. Alguém pode me ajudar? Desde já agradeço.
Obrigado,
Pablo Moreira
PABLOMOREIRAGV,
Você precisa verificar antes de disparar:
Se o arquivo existe:
=========================================================================
Verificar se um Arquivo ou Caminho Existe
http://www.ambienteoffice.com.br/officevba/verificar_se_um_arquivo_ou_caminho_existe/
=========================================================================
Se não existir tudo bem.
(agora entra recursividade)
Se existir você precisa verificar se o último caractere é um número.
Se for um número, verifique se o penúltimo caracter é um número (para casos de valores 10 ou maiores).
Se for um número, verifique se o penúltimo caracter é um número (para casos de valores 100 ou maiores).
... e assim até encontrar um letra, o primeiro caracter do nome do arquivo ou a [Ô]\[Ô].
Pega o número encontrado e soma mais um ...
... anexa ao nome do arquivo e manda gravar!
é isso?
[][ô]s,
Tunusat.
Você precisa verificar antes de disparar:
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
nome + [Ô].pdf[Ô], Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Se o arquivo existe:
=========================================================================
Verificar se um Arquivo ou Caminho Existe
http://www.ambienteoffice.com.br/officevba/verificar_se_um_arquivo_ou_caminho_existe/
=========================================================================
Sub Teste()
Dim s As String
s = [Ô]c: emp este.xlsx[Ô]
If CaminhoExiste(s) Then
MsgBox [Ô]O caminho ou arquivo [ô][Ô] & s & [Ô][ô] existe e é válido.[Ô] _
, vbInformation _
, [Ô]Informação[Ô]
Else
MsgBox [Ô]O caminho ou arquivo [ô][Ô] & s & [Ô][ô] não existe ou é inválido.[Ô] _
, vbCritical _
, [Ô]Erro[Ô]
End If
End Sub
Function CaminhoExiste(sCaminho As String) As Boolean
[ô]Testa se um caminho ou arquivo existe (ou é válido)
[ô]Caso deseja testar se um caminho existe, certifique-se que o
[ô]parâmetro de entrada sCaminho TERMINE com uma \, como, por
[ô]exemplo, Debug.Print CaminhoExiste([Ô]c: emp\felipe\[Ô]). Caso
[ô]contrário, a função buscará um arquivo chamado felipe, sem
[ô]extensão, na pasta c: emp.
If Dir(sCaminho) = vbNullString Then
CaminhoExiste = False
Else
CaminhoExiste = True
End If
[ô]A forma abreviada da função pode ser escrita como:
[ô]CaminhoExiste = Dir(sCaminho) <> vbNullString
End Function
Se não existir tudo bem.
(agora entra recursividade)
Se existir você precisa verificar se o último caractere é um número.
Se for um número, verifique se o penúltimo caracter é um número (para casos de valores 10 ou maiores).
Se for um número, verifique se o penúltimo caracter é um número (para casos de valores 100 ou maiores).
... e assim até encontrar um letra, o primeiro caracter do nome do arquivo ou a [Ô]\[Ô].
Pega o número encontrado e soma mais um ...
... anexa ao nome do arquivo e manda gravar!
é isso?
[][ô]s,
Tunusat.
TUNUSAT,
Tentei adaptar esse código ao arquivo modelo que postei, parece que está identificando o caminho mesmo. Porém, não sei executar esta implementação referente a alteração automática do nome que você sugeriu.
Segue anexo modelo com o código adaptado.
Tentei adaptar esse código ao arquivo modelo que postei, parece que está identificando o caminho mesmo. Porém, não sei executar esta implementação referente a alteração automática do nome que você sugeriu.
Segue anexo modelo com o código adaptado.
PABLOMOREIRAGV,
O legal seria montar uma função à parte que recebe uma string que é o nome sem a extensão, trata e depois devolve formatado.
Este código que eu postei verifica se o trecho apresentado é composto de um número.
=====================================================
SOMENTE NUMEROS
http://vbmania.com.br/index.php?modulo=detalhe&id=8652
=====================================================
Dai você vai lendo o arquivo de trás para frente pegando a raspa da mandioca...
... vou colocar uma função que fiz à s pressas ...
... mudei de [Ô].PDF[Ô] para [Ô].TXT[Ô] só para ficar mais fácil para eu testar ...
... por favor melhore-a:
Teste +/- assim:
O caminho é por aqui.
[][ô]s,
Tunusat
O legal seria montar uma função à parte que recebe uma string que é o nome sem a extensão, trata e depois devolve formatado.
Este código que eu postei verifica se o trecho apresentado é composto de um número.
=====================================================
SOMENTE NUMEROS
http://vbmania.com.br/index.php?modulo=detalhe&id=8652
=====================================================
Dai você vai lendo o arquivo de trás para frente pegando a raspa da mandioca...
... vou colocar uma função que fiz à s pressas ...
... mudei de [Ô].PDF[Ô] para [Ô].TXT[Ô] só para ficar mais fácil para eu testar ...
... por favor melhore-a:
Function Renomeia(strNome As String) As String
[ô]TEM variáveis d+ acho que dá para melhorar!
Dim strCaracter As String
Dim strCaracterAnterior As String
Dim strNovoNome As String
Dim intTamanho As Integer
Dim i As Integer
[ô]Lê cada caractere do arquivo
For i = 0 To Len(strNome) - 1
[ô]Caso o arquivo seja composto SOMENTE de números o bicho pega aqui!
strNovostrNome = strNome + 1
[ô]Pega os caracteres de trás para frente
strCaracter = Mid(strNome, Len(strNome) - i, i + 1)
[ô]Verifica que se é número o que se pegou
If InStr([Ô]0123456789[Ô], strCaracter) = 0 Then
[ô]Reposiciona caracter válido
strCaracter = strCaracterAnterior
[ô]Verifica o tamanho restante do arquivo
intTamanho = Len(strNome) - Len(strCaracter)
[ô]Incrementa somente depois de verificar o tamanho! Caso passe de 99 para 100 (por exemplo)
strCaracter = strCaracter + 1
If intTamanho > 0 Then
[ô]Coloca a parte texto + o número incrementado
strNovostrNome = Left(strNome, intTamanho) & strCaracter
End If
[ô]Sai da rotina
Exit For
End If
[ô]Guarda a posição anterior (que era sempre válida)
strCaracterAnterior = strCaracter
Next
[ô]Devolve o nome alterado correto
Renomeia = strNovostrNome
End Function
Teste +/- assim:
[ô]nome = [Ô]TESTE[Ô]
[ô]nome = [Ô]TESTE12[Ô]
nome = [Ô]12345[Ô]
[ô]If CaminhoExiste(SelecionarPasta + [Ô]\[Ô] + nome + [Ô].pdf[Ô]) Then
If CaminhoExiste(SelecionarPasta + [Ô]\[Ô] + nome + [Ô].txt[Ô]) Then
[ô]MsgBox [Ô]O caminho ou arquivo [ô][Ô] & s & [Ô][ô] existe e é válido.[Ô] _
, vbInformation _
, [Ô]Informação[Ô]
nome = Renomeia(nome)
MsgBox [Ô]O strNome do arquivo é [ô][Ô] & nome & [Ô][ô] existe e é válido.[Ô] _
, vbInformation _
, [Ô]Informação[Ô]
O caminho é por aqui.
[][ô]s,
Tunusat
Pablo,
Adaptei no exemplo anterior que tinha lhe passado!
Tem uma observação importante não esquece de fazer referencia a dll Microsoft Scripting Runtime
No VBA menu Ferramentas > Referencias...
Abraço
Adaptei no exemplo anterior que tinha lhe passado!
Tem uma observação importante não esquece de fazer referencia a dll Microsoft Scripting Runtime
No VBA menu Ferramentas > Referencias...
Abraço
MITSUEDA, muito obrigado... o seu modelo deu certinho no que eu estava aplicando em meu projeto.
Tópico encerrado , respostas não são mais permitidas