none
Reconhecer a porta USB automaticamente RRS feed

  • Pergunta

  • Bom dia,

    Galera, estou com um probleminha... Fiz uma planilha para um cliente, onde ele faz uns controles em R$ e o cadastro com imagens. As imagens e a planilha ficam no pendrive. Quando faço a procura da imagem fica assim:

    Private Sub ComboBox2_Change()
    
    Sheets("Controles").Range("L2") = ComboBox2
    
    
    Dim Imagem
    Dim arq
    
    
        arq = "E:\Planilha\ESPONJAS.bmp"
        Set Image1.Picture = LoadPicture(arq) ' carrega a imagem
          Image1.PictureSizeMode = fmPictureSizeModeZoom
        
        Imagem = "E:\Planilha\" & Sheets("Controles").Range("L2") & ".bmp"
    
          If Dir(Imagem) <> "" Then ' verifica se o arquivo existe
          Set Image1.Picture = LoadPicture(Imagem) ' carrega a imagem
          Image1.PictureSizeMode = fmPictureSizeModeZoom
          
          
    End If
    End Sub

    O problema se encontra no caminho... Pois quando coloca o pendrive em outro pc ou outra porta ele reconhece outra unidade.

    Tem como criar um método para reconhecer automaticamente a porta?

    Atenciosamente.

    quarta-feira, 22 de outubro de 2014 11:59

Respostas

  • Boa tarde Fcvelho,

    A resposta do Rafael Kamimura deveria resolver o seu problema, tente utilizar o código com a alteração indicada por ele conforme abaixo:

    Private Sub ComboBox2_Change()
    
        Sheets("Controles").Range("L2") = ComboBox2
    
        Dim Imagem
        Dim arq
    
        arq = ThisWorkbook.Path & "\ESPONJAS.bmp"
        Set Image1.Picture = LoadPicture(arq) ' carrega a imagem
        Image1.PictureSizeMode = fmPictureSizeModeZoom
        
        Imagem = "E:\Planilha\" & Sheets("Controles").Range("L2") & ".bmp"
    
        If Dir(Imagem) <> "" Then ' verifica se o arquivo existe
          Set Image1.Picture = LoadPicture(Imagem) ' carrega a imagem
          Image1.PictureSizeMode = fmPictureSizeModeZoom
        End If
        
    End Sub
    



    Roberto Santos

    quarta-feira, 22 de outubro de 2014 19:04

Todas as Respostas

  • Sim, em C#:

    var drive = DriveInfo.GetDrives().First(drive => drive.IsReady && drive.DriveType == DriveType.Removable);

    Em VB .NET:

    Dim drive = DriveInfo.GetDrives().First(Function(drive) drive.IsReady AndAlso drive.DriveType = DriveType.Removable)

    Esse código obtém o primeiro dispositivo USB (removível).

    Basta substituir no seu código. A propriedade que contém o caminho é drive.RootDirectory.FullName.

    Marque como resposta se foi útil!


    • Editado Deric Ferreira quarta-feira, 22 de outubro de 2014 12:12
    • Sugerido como Resposta Deric Ferreira quarta-feira, 22 de outubro de 2014 12:12
    quarta-feira, 22 de outubro de 2014 12:11
  • Olá fcvelho!

    Você consegue resolver isso com o comando ThisWorkbook.Path. Exemplo:

    arq = ThisWorkbook.Path & "\ESPONJAS.bmp"



    Rafael Kamimura

    • Sugerido como Resposta Roberto_Santos quarta-feira, 22 de outubro de 2014 18:58
    quarta-feira, 22 de outubro de 2014 12:13
  • Ele não citou que possui a planilha aberta via aplicação. Na realidade a planilha também ficará no pen drive pelo que foi explicado.
    quarta-feira, 22 de outubro de 2014 12:16
  • A planilha fica no pendrive.

    Deric, não consegui fazer funcionar...

    quarta-feira, 22 de outubro de 2014 12:39
  • Qual foi o problema? O que retornou na sua variável drive?
    quarta-feira, 22 de outubro de 2014 12:40
  • Estou fazendo no VBA, então declarei a variável drive.

    quarta-feira, 22 de outubro de 2014 12:45
  • Ahhh. Nesse caso, obtenha os drivers:

    Dim drives = DriveInfo.GetDrives()

    E depois faça um loop nos drives e um if

    drive.IsReady AndAlso drive.DriveType = DriveType.Removable

    • Sugerido como Resposta Deric Ferreira quarta-feira, 22 de outubro de 2014 12:50
    quarta-feira, 22 de outubro de 2014 12:50
  • Private Sub ComboBox1_Change()
    Sheets("Controles").Range("L3") = ComboBox1
    
    
    Dim Imagem
    Dim arq
    Dim drive
    
    drive = DriveInfo.GetDrives()
    
    drive.IsReady AndAlso
    drive.DriveType = DriveType.Removable
    
    
    
    
        arq = "E:\Jogo do Bicho\ESPONJAS.bmp"
        Set Image2.Picture = LoadPicture(arq) ' carrega a imagem
          Image2.PictureSizeMode = fmPictureSizeModeZoom
        
        Imagem = "E:\Jogo do Bicho\" & Sheets("Controles").Range("L3") & ".bmp"
    
          If Dir(Imagem) <> "" Then ' verifica se o arquivo existe
          Set Image2.Picture = LoadPicture(Imagem) ' carrega a imagem
          Image2.PictureSizeMode = fmPictureSizeModeZoom
          
          
    End If
    
    Debug.Print drive
    
    End Sub

    Tenho que fazer um loop para buscar as portas?

    Nesse código ele informa que esta faltando objeto.

    quarta-feira, 22 de outubro de 2014 13:00
  • Fazer um loop com a sua variável drive, um for e para cada item, colocar um if

    If(drive.IsReady AndAlso drive.DriveType = DriveType.Removable)

    • Sugerido como Resposta Deric Ferreira quarta-feira, 22 de outubro de 2014 13:11
    quarta-feira, 22 de outubro de 2014 13:11
  • quarta-feira, 22 de outubro de 2014 14:46
  • Faltou o AndAlso, o begin e o end if. Desculpe, não tenho o ambiente aqui para detalhar linha a linha o que deve ser feito.
    • Sugerido como Resposta Deric Ferreira quarta-feira, 22 de outubro de 2014 15:55
    quarta-feira, 22 de outubro de 2014 15:55
  • Tentei de varias formas, agora aparece erro de sintaxe:

    Private Sub busca()
    
    Dim drives
    
    drives = DriveInfo.GetDrives()
    
    For i = 1 To drive
    
    If drive.IsReady AndAlso drive.DriveType = DriveType.Removable Then
    
    Next i
    
    Debug.Print drive
    
    End If
    End Sub

    Não estou conseguindo entender a logica para procurar as unidades, ai o código esta saindo errado :(

    quarta-feira, 22 de outubro de 2014 16:17
  • A lógica é simples.Na variável drivers você tem um array de drives. Agora, você deve percorrer o array e verificar para cada item se ele é uma unidade removível e está pronta para uso, só isso.
    quarta-feira, 22 de outubro de 2014 16:29
  • Olá fcvelho!

    Você consegue resolver isso com o comando ThisWorkbook.Path. Exemplo:

    arq = ThisWorkbook.Path & "\ESPONJAS.bmp"



    Rafael Kamimura

    Se a planilha fica no pen drive e não está aberta na aplicação, como essa pode ser a resposta???
    quarta-feira, 22 de outubro de 2014 19:01
  • Boa tarde Fcvelho,

    A resposta do Rafael Kamimura deveria resolver o seu problema, tente utilizar o código com a alteração indicada por ele conforme abaixo:

    Private Sub ComboBox2_Change()
    
        Sheets("Controles").Range("L2") = ComboBox2
    
        Dim Imagem
        Dim arq
    
        arq = ThisWorkbook.Path & "\ESPONJAS.bmp"
        Set Image1.Picture = LoadPicture(arq) ' carrega a imagem
        Image1.PictureSizeMode = fmPictureSizeModeZoom
        
        Imagem = "E:\Planilha\" & Sheets("Controles").Range("L2") & ".bmp"
    
        If Dir(Imagem) <> "" Then ' verifica se o arquivo existe
          Set Image1.Picture = LoadPicture(Imagem) ' carrega a imagem
          Image1.PictureSizeMode = fmPictureSizeModeZoom
        End If
        
    End Sub
    



    Roberto Santos

    quarta-feira, 22 de outubro de 2014 19:04
  • Não irá funcionar...pessoal, por favor leiam a pergunta antes de sugerir resposta:

    "Tem como criar um método para reconhecer automaticamente a porta (USB)?"

    quarta-feira, 22 de outubro de 2014 19:12
  • Deric,

    Talvez tenha passado batido por você, mas este é um fórum de VBA. Suas sugestões em C# e VB.NET funcionam, mas o inquiridor está usando o Excel e é por isso que ele está obtendo erros de sintaxe no VBE.

    A solução para o problema não precisa envolver o uso de métodos para descobrir em qual unidade está o pen drive, uma vez que se a pasta de trabalho e as imagens estão juntas no pen drive, a propriedade ThisWorkbook.Path retorna o caminho em questão, independentemente em qual unidade o pen drive atribua a letra da unidade.

    O Rafael deu o caminho das pedras, mas o Roberto fez a gentileza de reescrever o código do inquiridor com as devidas modificações.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br


    quarta-feira, 22 de outubro de 2014 21:31
    Moderador