Bom dia a todos. Adaptei um código para renomear vários arquivo com vba, que realiza a seguinte função:
1) Eu seleiono a pasta,
2) O VBA abre o PDF (Nota fiscal) , extrai a informação do texto e com a razão social fecha o pdf e renomeia ele com o nome extraido.
O problema é que após renomear o primeiro arquivo corretamente a execução do código trava, e é necessário finalizar o processo.
Segue abaixo o código.
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Public Function ListaArquivos(ByVal Caminho As String) As String()
'Atenção: Faça referência à biblioteca Micrsoft Scripting Runtime
Dim FSO As New FileSystemObject
Dim result() As String
Dim Pasta As Folder
Dim Arquivo As File
Dim Indice As Long
ReDim result(0) As String
If FSO.FolderExists(Caminho) Then
Set Pasta = FSO.GetFolder(Caminho)
For Each Arquivo In Pasta.Files
Indice = IIf(result(0) = "", 0, Indice + 1)
ReDim Preserve result(Indice) As String
result(Indice) = Arquivo.Name
Next
End If
ListaArquivos = result
ErrHandler:
Set FSO = Nothing
Set Pasta = Nothing
Set Arquivo = Nothing
End Function
Private Sub selecionar_pasta()
Dim box As Folder
Dim arquivos() As String
Dim lCtr As Long
Dim AdobeApp As String
Dim StartAdobe
Dim Arquivo As String
Dim NomeAntigo As String
Dim NomeNovo As String
On Error Resume Next
linha = 1
ultima_linha = Sheets("teste").Cells(Rows.Count, 1).End(xlUp).Row
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Buscar pasta"
.InitialFileName = ThisWorkbook.Path
.Show
.AllowMultiSelect = False
Pasta = .SelectedItems(1)
End With
TextBox1 = box
arquivos = ListaArquivos(Pasta)
Sleep 1000
For lCtr = 0 To UBound(arquivos)
Debug.Print arquivos(lCtr)
'Inserir código aqui'
'Cells(linha, 1).Value = arquivos(lCtr)
'linha = (linha + 1)
'Sleep 500
pdf = arquivos(lCtr)
AdobeApp = "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
Sleep 2000
For Each pdf In Pasta
Adobefile = Pasta & "\" & pdf
StartAdobe = Shell("" & AdobeApp & " " & """" & Adobefile & """" & "", 1)
Sleep 2000
Application.SendKeys ("^a")
Application.SendKeys ("^c")
Sleep 2000
Dim KillPdf As String
KillPdf = "TASKKILL /F /IM AcroRd32.exe"
Shell KillPdf, vbHide
AppActivate Application.Caption
Sheets("teste").Range("A1").Activate
SendKeys ("^v")
DoEvents
Dim Razao As String
Razao = Sheets("teste").Range("A17").Value
pontos = InStr(1, Razao, ":")
qtdeLetras = Len(Razao)
Nome = Right(Razao, qtdeLetras - pontos)
Sheets("teste").Range("C1").Value = Nome
Do While Not IsEmpty(Range("C1"))
NomeAntigo = Pasta & "\" & pdf
NomeNovo = Pasta & "\" & Sheets("teste").Range("C1").Value & ".pdf"
Sheets("teste").Range("C2").Value = Adobefile
Sheets("teste").Range("C3").Value = Pasta & "\" & Sheets("teste").Range("C1").Value & ".pdf"
Name NomeAntigo As NomeNovo
' DoEvents
Loop
' MsgBox "Nomes dos arquivos alterados!", vbOKOnly, "Processo Concluído"
Next
Next
' MsgBox ("Arquivos Encontrados = ") & (linha - 1)
End Sub
Já tentei de tudo, e não consegui resolver esse problema, se eu remover o Do while, ele executa normalmente, porem não renomeia os arquivos. Seu eu faço esse laço, ele renomeia só o primeiro e trava geral.
Boa noite, trabalho com Delphi e estou tendo dificuldade em fazer conexão com meu servidor que esta na argentina, uso o firedac para fazer a conexão com o banco, so que o comando que estou utilizando esta dando erro e não sei se estou configurando certo a minha query.
Ja criei os linked server e tambem não resolveu......
uso um select dentro do delphi dessa maneira :
DELPHI
FDQuery e dentro uso esse select
Select * from [192.168.XX.XXX].banco.dbo.tabela direcionando para o meu servidor que esta na argentina sendo 192.168.xx.xxx o ip do servidor de la e o nome do banco é servicos e a tabela ordens.
Se alguem conhece ou ja fez esse tipo de conexão , estou precisando dessa grande ajuda...
Olá a todos. Criei um procedimento para verificar se um usuário está cadastrado no banco de dados. Utilizo Firebird como BD e componentes Zeos para acessar o banco. Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
Segue o código:
procedure Tfrm_login.SpeedButton1Click(Sender: TObject);
var Qry : TZQuery;
begin
Qry:=TZQuery.Create(nil);
Qry.Connection := dm_dados.ZConnection1; //componente de conexão
Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');
Qry.Open;
if Qry.Locate('USER',Edit1.Text,[]) then
begin
ShowMessage('usuário cadastrado');
end
else
begin
ShowMessage('usuário inexistente');
Edit1.SetFocus;
end;
FreeAndNil(Qry);
end;
Se alguém puder ajudar agradeço desde já.
Obrigado
Estou com um problema enorme aqui. Precisei formatar o PC, e entao fiz um backup de tudo que tenho..normal
Quando abri o meu projeto no delphi e pedi para compilar ele parou na linha 114 e começou a aumentar os erros. Deixei por duas horas para ver até onde ia...e continuou
Não tenho ideia do que esta acontecendo. Se não tivesse forçado a parada forçada nao teria parado até agora.
Alguem ja passou por isso? Estou bem preocupado, pois isso nunca me aconteceu.
Boa tarde meus amigos,
Estou implementando uma integração entre um banco de dados local e outro na nuvem da Amazon.
Estou com um problema sério aqui: ao fazer o Putclientes, por exemplo, ou seja, ao enviar ao servidor as alterações e inserções do Banco local, se, após um insert em lote na tabela da nuvem, o Result da função Put não conseguir retornar ao cliente rest que o chamou, por uma queda do link de internet, por exemplo, esses inserts já foram commitados na nuvem, mas os relacionamentos entre o código externo gerado e o código interno enviado, não pode ser concebida.
Sendo assim, no próximo Put, os clientes sem a relação entre os códigos, serão inseridas novamente, gerando duplicidade de cadastros na nuvem.
Meu problema é saber como commitar a transação na nuvem somente após o Result chegar ao cliente rest que fez a chamada.
Alguém pode me ajudar com isso?