Tag Archives: arquivos

Excel – Listar arquivos em diretório num ListBox

Acho que desenterrei essa. Mas o que seria da vida sem um pouco de saudosismo? Como idade não define utilidade, aí vai mais um código que pode servir de ajudar para aquele seu aplicativo bacana em Excel VBA. A ideia é ter acesso fácil a lista de arquivos de um determinado diretório. De aí em diante, as possibilidades são inúmeras. O form não poderia ser mais simples:

For Lista Arquivos Diretório
For Lista Arquivos Diretório

O código do botão ListarArquivos:

Private Sub cmdListaArquivos_Click()
    lstArquivos.Clear
    Dim arquivos() As String
    Dim lCtr As Long
    arquivos = ListaArquivos(txtCaminho.Text)
    For lCtr = 0 To UBound(arquivos)
      lstArquivos.AddItem arquivos(lCtr)
    Next
End Sub

E por fim, o código que faz o trabalho:

Option Explicit
 
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
 
Public Sub AbreForm()
    UserForm1.Show
End Sub
 
Public Sub VerCodigo()
    Application.Goto Reference:="AbreForm"
End Sub

Pressionado o botão Listar Arquivos em uma pasta do seu computador, temos algo parecido com isso:

For Lista Arquivos Diretório Preenchido
For Lista Arquivos Diretório Preenchido

Download do arquivo:

ListaArquivosDiretorio.zip
(10.67 KiB)

Bom proveito!

Dicas – Renomeando arquivos em massa no C#

Por essas e outras é muito bacana ser um programador! 😀

Mas primeiro, um pouco de história. Precisando renomear um série de arquivos em uma pasta do computador, vamos lá buscar na internet quais são as opções que existem para fazê-lo. Nada além do que o Windows é capaz. O mesmo permite que você renomeie em massa, selecionando vários arquivos, eles terão o mesmo nome com extenções diferentes, ou indexados se tiverem a mesma. No caso, o que queria era remover uma determinada string de vários arquivos, ou substituir por outra.

O resultado? Um programa em C# feito em modo Console que foi capaz de executar a proeza. Levou um tempo para refiná-lo, mas ficou bacana:

using System;
using System.IO;
 
public class RenomeiaArquivos
{
	public static void Main(string[] args)
	{
		// coleta os parâmetros, se houver
		if (args.Length <= 0) {
			// encerra
			Console.WriteLine("Sem parâmetros?!?!?");
			return;
		}
		// 0 é a pasta
		string folder = args[0];
		// valida
		if (!Directory.Exists(folder)) {
			Console.WriteLine("Diretório inexistente");
			return;
		}
		// 1 é a string de procura
		string find = args[1];
		// valida
		if (string.IsNullOrEmpty(find)) {
			Console.WriteLine("A string de procura não pode ser vazia");
			return;
		}
		// 2 é a string de substituição
		string replace = args[2];
 
		foreach(string file in Directory.GetFiles(folder)) {
			Console.WriteLine(string.Format("Renomeando arquivo {0}",  new object[] { file }));
			try {
				File.Move(file, file.Replace(find, replace));
				Console.WriteLine("OK");
			}
			catch {
				Console.WriteLine("Ops! Não foi possível renomear este arquivo!");
			}
		}
	}
}

A chamada é simples, mas precisa ser feita em modo Console:

  • Abra o Prompt de comando
  • Aponte para a pasta em que está o executável (mais abaixo para download)
  • Digite RenomeiaArquivo “[PASTA]” “[PROCURA]” “[SUBSTITUI]”
  • Onde:
    • [PASTA] = É a pasta onde estão seus arquivos a serem renomeados
    • [PROCURA] = O texto procurado no nome do arquivo que será substituído
    • [SUBSTITUI] = O texto que será colocado no texto de procura

Voilá! Seus arquivos serão renomeados em massa! Rápido, simples, eficaz!

Fica a promessa de uma versão mais amigável ao usuário final com uma tela e tudo mais. Vão os arquivos desta versão logo abaixo:

Bom proveito!

Dicas – Fazendo uma auto exclusão de um arquivo

Mais uma do fórum, que está cada dia melhor!

A auto exclusão de um arquivo é algo um pouco assustador. Conceitualmente é até difícil pensar nisso. Mas como tudo depende do quanto você precisa, alguém sempre acha a solução. Como vi pouquíssimas menções a soluções deste problema, bom, lá vai.

O camarada M. Gallant publicou o VBScript abaixo que efetua sua auto exclusão. Bom, não resolve tudo, mas como não é tão simples efetuar a operação, a idéia á utilizar o vbs para efetuar a operação de exclusão do arquivo desejado e deixar o script de auto exclua em seguida. A explicação e os créditos estão do próprio código.

'***************************************************************
' selfdel.vbs demonstrates a wsh script which can dynamically 
' remove (delete) itself on completion.
' A batch file is dynamically created which is then executed
' at the end of the wsh script. The batch file deletes this
' script file, after execution stops using a test loop.
' 
' The batch file also deletes itself as a final cleanup step.
' Based on Jeffrey Richter  Jan/1996  MSJ Win32 Q & A:
'  http://www.microsoft.com/msj/defaulttop.asp?page=/msj/archive/SF9C.htm
'
'  http://home.istar.ca/~neutron/wsh
'	
'                                        M. Gallant  10/03/2002
' ***************************************************************
 
Option Explicit
Dim oShell, fso, f, scriptfile, Message
Const Title = "SelfDel"
Const ForReading = 1, ForWriting = 2
Const deltime = 3
Const target = "target.txt"
Const batchfile = "_cleanup.bat"
 
scriptfile = WScript.ScriptFullName
Message = "This script """ & scriptfile & """ will self-destruct in " & _
	deltime & " seconds"
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Popup Message, deltime, Title, vbOKONLY + vbExclamation
 
Set fso = CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile(batchfile, ForWriting, True)
 
 f.WriteLine ":Loop"
 f.WriteLine "del " & """" & scriptfile & """"
 f.WriteLine "if exist """ & scriptfile & """ goto Loop"
 f.WriteLine "del %0"
 f.close
 
set fso = nothing
set f = nothing
 
oShell.Run batchfile,0
set oShell = nothing

Bom proveito!

VBA – How to get a of list files inside a folder

And here is one more hint for your VBA toolbox! The macro below returns an array of strings with the list of files which are contained in a previously informed folder:

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

The macro below is an example of how to call the “ListFiles” Function created before, listing the files inside C:\Temp folder on your computer:

Private Sub ListaArquivos()
    Dim arquivos() As String
    Dim lCtr As Long
    arquivos = ListaArquivos("C:\temp")
    For lCtr = 0 To UBound(arquivos)
      Debug.Print arquivos(lCtr)
    Next
End Sub

Important: As mentioned in the code, you need to add the reference to the Microsoft Scripting Runtime lib to be able to access the File System Objecst (FSO) objecjs.

Enfoy!