MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Copiar objeto para área de transferência

    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty [Resolvido]Copiar objeto para área de transferência

    Mensagem  MMS em Seg 14 Set 2020 - 10:21

    Bom dia pessoal! Estou precisando criar uma função vba para copiar um objeto de uma pasta para área de transferência e depois o usuário possa dar botão direito colar ou usar o Control V para onde quiser. Importante já tenho a função copiar e colar com destino já pré-determinado e não estou conseguindo adaptar para somente copiar. Preciso somente copiar para área de transferência. Alguém me ajuda.

    Grato,

    Marcelo
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 306
    Registrado : 28/10/2010

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  zcarloslopes em Ter 15 Set 2020 - 4:39

    Bom dia MMS,

    Faça o seguinte:

    Coloque num Módulo:
    Código:
    Option Compare Database

    Option Explicit
    Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
    Private Declare Function CloseClipboard Lib "user32.dll" () As Long
    Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long
    Private Declare Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
    Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function GlobalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32.dll" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32.dll" (ByVal hMem As Long) As Long
    Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyW" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long

    Public Sub SetClipboard(sUniText As String)
        Dim iStrPtr As Long
        Dim iLen As Long
        Dim iLock As Long
        Const GMEM_MOVEABLE As Long = &H2
        Const GMEM_ZEROINIT As Long = &H40
        Const CF_UNICODETEXT As Long = &HD
        OpenClipboard 0&
        EmptyClipboard
        iLen = LenB(sUniText) + 2&
        iStrPtr = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, iLen)
        iLock = GlobalLock(iStrPtr)
        lstrcpy iLock, StrPtr(sUniText)
        GlobalUnlock iStrPtr
        SetClipboardData CF_UNICODETEXT, iStrPtr
        CloseClipboard
    End Sub

    Public Function GetClipboard() As String
        Dim iStrPtr As Long
        Dim iLen As Long
        Dim iLock As Long
        Dim sUniText As String
        Const CF_UNICODETEXT As Long = 13&
        OpenClipboard 0&
        If IsClipboardFormatAvailable(CF_UNICODETEXT) Then
            iStrPtr = GetClipboardData(CF_UNICODETEXT)
            If iStrPtr Then
                iLock = GlobalLock(iStrPtr)
                iLen = GlobalSize(iStrPtr)
                sUniText = String$(iLen \ 2& - 1&, vbNullChar)
                lstrcpy StrPtr(sUniText), iLock
                GlobalUnlock iStrPtr
            End If
            GetClipboard = sUniText
        End If
        CloseClipboard
    End Function
    Para copiar uma String para a área de transferência:
    Código:
    Dim CopiaString as String
    CopiaString = "bla bla bla"
    SetClipboard (CopiaString)
    Adapte para o seu propósito
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Copiar objeto para área de transferência

    Mensagem  MMS em Ter 15 Set 2020 - 13:01

    Boa tarde! Obrigado pela dica, porém fiz exatamente como me passou , mas não está funcionando. Copiei o módulo e fiz a chamada num botão , mas não vai para área de trabalho. Copilei direitinho e não dá erro, porém não copia. Alguma dica?
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2179
    Registrado : 21/11/2016

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  DamascenoJr. em Ter 15 Set 2020 - 13:15

    Tópico movido por não relacionar-se com formulário.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Copiar objeto para área de transferência

    Mensagem  MMS em Ter 15 Set 2020 - 14:15

    não entendi o motivo da mudança uma vez que minha necessidade será aplicada num formulário, mas ok se for para melhor, obrigado!
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 306
    Registrado : 28/10/2010

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  zcarloslopes em Qua 16 Set 2020 - 3:44

    Bom dia MMS,

    Veja o exemplo anexo.

    Abraço
    Anexos
    [Resolvido]Copiar objeto para área de transferência AttachmentAreaTranf.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (16 Kb) Baixado 2 vez(es)
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Copiar objeto para área de transferência

    Mensagem  MMS em Qua 16 Set 2020 - 11:42

    Bom dia! Agora com seu exemplo descobri o meu erro, nesse caso está copiando a string "texto", porém eu preciso copiar um objeto, exemplo: de uma pasta c:\Fotos\imagem1.jpg para o destino (área de transferência), pois ficará em aberto para o usuário colar onde quiser, por exemplo na área de trabalho.

    Tem ótimos exemplos aqui (inclusive tenho um desses funcionando), porém que copia e cola já com destino pré determinado. Não consegui adaptar apenas para copiar que é o que preciso.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2179
    Registrado : 21/11/2016

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  DamascenoJr. em Qua 16 Set 2020 - 18:23

    O correto é montar o caminho através de uma janela. Tal qual fazem os aplicativos quando clicamos em salvar algo, quando daí abrem uma janela para selecionarmos o caminho de destino.

    Eis o código para abrir a janela pedindo pra localizar a pasta de destino.

    Código:
    Private Function fncLocalizarPasta()
    On Error GoTo trataerro

        Dim fd As Office.FileDialog
        
        Set fd = Application.FileDialog(msoFileDialogFolderPicker)
        
        With fd
            .AllowMultiSelect = False
            .ButtonName = "Selecionar"
            .InitialFileName = "c:\"
            .InitialView = msoFileDialogViewList
            .Title = "Selecione a pasta"
        End With
        
        If fd.Show Then fncLocalizarPasta = fd.SelectedItems(1)
        
    Sair:
        Exit Function
        
    trataerro:
        fncLocalizarPasta = ""
        Resume Sair:
    End Function

    Daí bastaria usar
    Código:
    Dim strOrigem as string
    dim strDestino as string

    strOrigem = "SeuCaminhoOrigemPreDefinido"
    strDestino = fncLocalizarPasta
    if strDestino = "" then exit sub 'parando o código pois foi clicado em cancelar na janela de localizar pasta
    strDestino = strDestino & "\SeuArquivo.Formato"
    CreateObject("Scripting.FileSystemObject").CopyFile strOrigem, strDestino


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Copiar objeto para área de transferência

    Mensagem  MMS Ontem à(s) 11:35

    Boa tarde! Essa solução eu tenho aqui, mas precisa ser algo que se mantenha na area de transferência para o usuário dar um Control V ou botão direito colar.

    Vou explicar o problema:

    Tenho uma aplicação que está num servidor remoto na Nuvem, dentro do sistema há um cadastro de produtos, onde dentro tem o link com várias imagens salvas em pastas (ex. medicamento XX - K:\produtos\imagem1.jpg). O usuário na maioria das vezes está com documentos no word aberto precisando colar imagens que estão nesse servidor. Se eu manualmente abrir a imagem no servidor, copiar e depois colar na máquina local, funciona perfeitamente, tanto na área de trabalho, quanto no próprio Word. Se der a opção do usuário buscar uma pasta para salvar ele irá se perder, pois na nuvem terá que busca uma pasta tsclient, ir navegando até chegar no c: local dele, será muito lento e arriscado e essa necessidade é muito dinâmica. A opção de um botão para copiar e depois ele somente dar um control v (ou botão direito colar) é sensacional.
    Bom é por essa razão a busca dessa solução. Obrigado por enquanto.
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 306
    Registrado : 28/10/2010

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  zcarloslopes Hoje à(s) 4:00

    Bom dia,

    Veja se é isto que pretende.
    Anexos
    [Resolvido]Copiar objeto para área de transferência AttachmentAreaTranf2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (30 Kb) Baixado 2 vez(es)
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  MMS Hoje à(s) 8:35

    Meu Deus!!!!! Com uma linha de código??? Resolvido, cara você é demais! Obrigado!
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 306
    Registrado : 28/10/2010

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  zcarloslopes Hoje à(s) 8:37

    Não esqueça o novo Módulo que coloquei no exemplo!
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Copiar objeto para área de transferência

    Mensagem  MMS Hoje à(s) 8:46

    Certo, perfeito!! Muito agradecido.
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 306
    Registrado : 28/10/2010

    [Resolvido]Copiar objeto para área de transferência Empty Re: [Resolvido]Copiar objeto para área de transferência

    Mensagem  zcarloslopes Hoje à(s) 9:40

    Quando poder dê o tópico como resolvido!
    avatar
    MMS
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 111
    Registrado : 12/04/2011

    [Resolvido]Copiar objeto para área de transferência Empty Copiar objeto para área de transferência

    Mensagem  MMS Hoje à(s) 9:48

    Achei q já tivesse feito. Valeu!

      Data/hora atual: Sex 18 Set 2020 - 15:18