VBA – Testando o Drive de CD/DVD

Mais uma do fórum. Baseado em um código também aqui do blog, um colega questionou sobre como descobrir ou garantir que um o drive de CD esteja preparado ou com o conteúdo a ser avaliado.

Bem, a parte de verificação de arquivos de pasta é outro assunto amplamente tratado. O problema é o caso do drive de CD/DVD. O código abaixo faz a proeza:

Sub TesteDriveCD()
    Dim oFso As New FileSystemObject
    Dim oDrive As Drive, cdDrive As Drive
 
 
    For Each oDrive In oFso.Drives
        If oDrive.DriveType = CDRom Then
            Set cdDrive = oDrive
        End If
    Next
 
    If cdDrive.IsReady Then
        Debug.Print cdDrive.AvailableSpace
        Debug.Print cdDrive.DriveLetter
        Debug.Print cdDrive.DriveType
        Debug.Print cdDrive.FileSystem
        Debug.Print cdDrive.FreeSpace
    Else
        MsgBox "O Drive de CD está vazio"
    End If
 
End Sub

O código é bem descritivo e faz uso dos objetos do FileSystemObject. O Enum DriveTypeConst ajuda bastante na identificação do tipo de Drive que é tratado.

OBS: No caso do código acima, é importante dizer que ele pega o 1º drive do tipo CDRom encontrado. Se houver mais, é preciso melhorar o código.

Não esqueçam de que para utilizar os objetos do FileSystemObject, é preciso adicionar a referência ao Microsoft Scripting Runtime.

Bom proveito!

VBA – Abrindo o Microsoft Outlook

Resolvendo uma dúvida no fórum recentemente, fui questionado de como abrir o Microsoft Outlook pelo VBA. A dúvida inicial era o envio de email, cujo exemplo abaixo pode ser visto:

http://www.tomasvasquez.com.br/downloads/e-mail_VBA_Outlook.xls

O problema é que este código segue a mesma lógica da criação de um email quando se clica em um link em uma página de internet, quando é aberto um novo email do Outlook e ao clicar em enviar, ele vai para a caixa de saída, sendo enviado somente quando o Outlook é aberto normalmente.

Pois bem, para forçar a abertura do Microsoft Outlook, o código abaixo é necessário:

Sub AbreOutlook()
    Dim Olook As Outlook.Application
    Set Olook = CreateObject("Outlook.Application")
 
    Dim ns As Outlook.Namespace
    Dim Folder As Outlook.MAPIFolder
 
    Set ns = Olook.GetNamespace("MAPI")
    Set Folder = ns.GetDefaultFolder(olFolderInbox)
 
    Olook.Explorers.Add Folder
 
    'faz o que tem que fazer
 
    Olook.Quit
    Set Olook = Nothing
 
End Sub

Estranhamente, criar a instância do “Outlook.Application” não suficiente, já que o método Show ou Visible não existem no objeto, da mesma forma que acontece quando manipulamos um “Excel.Application” ou mesmo “Word.Application”.

Na linha:

‘faz o que tem que fazer

É o código para manipular ou trabalhar com os objetos do Outlook, como a criação do email citada acima. O restante das linhas fecha o Outlook, e podem ser omitidas conforme a necessidade, o que manterá o Outlook aberto.

É importante frisar que o código não vai garantir a abertura do Outlook corretamente caso ele requisite credenciais ou senha de acesso, muito comum em redes empresariais.

Bom, está aí. Bom proveito!

VBA – Excluindo um módulo VBA programaticamente

Na necessidade de automação de projetos VBA, não é raro termos que manipular alguns de seus objetos, principalmente na questão de segurança. Uma delas e muito interessante é a manipulação de módulos VBA. Neste caso, o código abaixo efetua a exclusão de um módulo de nome Módulo1:

Sub ExcluirModuloVBA()
 
    Dim vbCom As Object
    Dim NomeModulo As String
    NomeModulo = "Módulo1"
    Set vbCom = Application.VBE.ActiveVBProject.VBComponents
 
    vbCom.Remove VBComponent:= vbCom.Item(NomeModulo)
    MsgBox NomeModulo & " excluído com sucesso"
 
End Sub

Lembrando, para que o códigos de manipulação de objetos VBA funcionem corretamente, é preciso habilitar a opção “Confiar no acesso ao modelo de objeto no projeto do VBA” na janela de Segurança de Macros.

Referências
http://www.ozgrid.com/VBA/delete-module.htm

Dicas – Localizando o Processo que está usando o arquivo

Sabe aquelas vezes em que você tenta excluir uma pasta ou arquivo no Windows e recebe a famosa mensagem de erro:

Ótimo. Em alguns casos, até conseguimos resolver o problema pois é óbvio saber qual programa está travando o arquivo, como um arquivo .doc que pode ser o Word, ou um .mp3 que o Media Player ou Winamp estejam “segurando”.

Mas em alguns casos não há santo que ajude a saber quem está segurando o arquivo.  A solução quase infalível é reiniciar o computador, o que em algumas situações é inviável. Bom, um programinha conhecido da maior parte dos MSGeeks, o Process Explorer, ajuda a encontrar o dito processo que bloqueia o arquivo.

Abrindo um parênteses sobre o Process Explorer, ele faz parte do Windows Sysinternals, um conhecido pacote de aplicativos disponibilizado pela Microsoft focado para administradores de rede que disponibiliza ferramentas de análise avançadas. No caso, o Process Explorer pode ser considerar um Gerenciador de Tarefas “tunado”. Existe várias ferramentas, mas vamos nos ater a ele. Para saber mais:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Na janela do Process Explorer, basta ir ao menu Find->Find Handle or DLL… Uma caixa de diálogo de busca é aberta. Basta digitar o nome do arquivo ou pasta que quer excluir para ser mostrada uma lista dos aplicativos que estão travando o arquivo:

Um duplo clique na linha fará com que você vá para uma janela em que todos os arquivos processo que bloqueiam arquivos podem ser vistos. Nele, basta seleciona o processo que está travando o arquivo, clicar com o direito e selecionar Close Handle:

Voilá! Seu arquivo está livre!

Bom proveito!

Referências:

http://windowsxp.mvps.org/processlock.htm